sqlalchemy
#!/usr/bin/env python
#coding:utf8 from sqlalchemy import create_engine,and_,or_,func,Table
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String,ForeignKey
from sqlalchemy.orm import sessionmaker,relationship Base=declarative_base()
engine=create_engine("mysql+mysqldb://root@localhost:3306/xym",echo=False)#echo=True可以打印详细的原生SQL User2Group = Table('user2group_uc',Base.metadata, #多个用户对应多个组,同时多个组对应多个用户,多对多
Column('users_id',ForeignKey('users.id'),primary_key=True),
Column('groups_id',ForeignKey('groups.id'),primary_key=True)
) Host2Group = Table('host2group_uc',Base.metadata, #多个主机对应多个组,同时多个组对应多个主机,多对多
Column('hosts_id',ForeignKey('hosts.id'),primary_key=True),
Column('groups_id',ForeignKey('groups.id'),primary_key=True)
) class Host(Base):
__tablename__ = 'hosts'
id = Column(Integer,primary_key=True,autoincrement=True)
hostname = Column(String(64),unique=True,nullable=False)
ip_addr = Column(String(128),unique=True,nullable=False)
port = Column(Integer,default=22)
group = relationship('Group', #一个主机对应多个组,一个组对应多个主机,多对多,group表可以通过host_list字段找到group对应的主机,host表能通过group这个字段找到这个主机对应的group
secondary=Host2Group,
backref='host_list') #反向关联,从Group表往这里关联host_list字段,groups.host_list就能获取到group的所有主机
def __repr__(self):
return "<hostname=%s, ip_addr=%s>" %(#如果没有定义repr,那么all返回的是所有的groups记录对应的sqlalchemy封装的表结构
self.hostname,
self.ip_addr) class Group(Base):
__tablename__ = 'groups'
id = Column(Integer,primary_key=True)
name = Column(String(64),unique=True,nullable=False)
def __repr__(self):
return "<name=%s>" %(self.name) class User(Base):
__tablename__ = 'users'
id = Column(Integer,primary_key=True)
username = Column(String(64),unique=True,nullable=False)
password = Column(String(255),nullable=False)
group = relationship('Group',
secondary=User2Group,
backref='user_list')
def __repr__(self):
return "<username=%s,password=%s>" %(self.username,self.password) Base.metadata.create_all(engine)#创建所有表结构
SessionCls=sessionmaker(bind=engine)#创建于数据库的会话session class,这里返回的是session的class
session=SessionCls() def create_database(): #########添加组########
dba_group=Group(name='dba')
sys_group=Group(name='system')
session.add_all([dba_group,sys_group])
session.commit()
##################添加主机#####################
nginx_server=Host(hostname='nginx_server',ip_addr='192.168.20.136')
lvs_server=Host(hostname='lvs_server',ip_addr='192.168.20.137')
mysql_server=Host(hostname='mysql_server',ip_addr='192.168.20.138')
redis_server=Host(hostname='redis_server',ip_addr='192.168.20.139',port=2211)
session.add_all([nginx_server,lvs_server,mysql_server,redis_server])
session.commit()
####################添加用户###################
user1=User(username='root',password='')
user2=User(username='abc',password='')
session.add_all([user1,user2])
session.commit()
################Host2Group关联################
sys_groups=session.query(Group).filter(Group.name=='system').all()
dba_groups=session.query(Group).filter(Group.name=='dba').all()
nginx_server.group=sys_groups
lvs_server.group=sys_groups
mysql_server.group=dba_groups
redis_server.group=dba_groups
session.commit()
#################User2Group#################
user1.group=sys_groups
user2.group=dba_groups
session.commit() def Auth(username,password):
#查询用户
result=session.query(User).filter(User.username==username,User.password==password).all()
if result:
print '[%s]:登录成功'%username
#获取用户ID
cuser_id=session.query(User).filter(User.username==username).first().id
#获取组ID
group_id = session.query(User2Group).filter(User2Group.c.users_id==cuser_id).first().groups_id #如果不是通过class创建的表,需要.c才能使用后面字段名
#获取组名
group_name=session.query(Group).filter(Group.id==group_id).first()
print "[--{:^10}--]".format(group_name.name)
for name in group_name.host_list:
print name.hostname,name.ip_addr
return True
else:
print '登录失败'
return False
sqlalchemy的更多相关文章
- sqlalchemy学习
sqlalchemy官网API参考 原文作为一个Pythoner,不会SQLAlchemy都不好意思跟同行打招呼! #作者:笑虎 #链接:https://zhuanlan.zhihu.com/p/23 ...
- tornado+sqlalchemy+celery,数据库连接消耗在哪里
随着公司业务的发展,网站的日活数也逐渐增多,以前只需要考虑将所需要的功能实现就行了,当日活越来越大的时候,就需要考虑对服务器的资源使用消耗情况有一个清楚的认知. 最近老是发现数据库的连接数如果 ...
- 冰冻三尺非一日之寒-mysql(orm/sqlalchemy)
第十二章 mysql ORM介绍 2.sqlalchemy基本使用 ORM介绍: orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似pyt ...
- Python 【第六章】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- SQLAlchemy(一)
说明 SQLAlchemy只是一个翻译的过程,我们通过类来操作数据库,他会将我们的对应数据转换成SQL语句. 运用ORM创建表 #!/usr/bin/env python #! -*- coding: ...
- sqlalchemy(二)高级用法
sqlalchemy(二)高级用法 本文将介绍sqlalchemy的高级用法. 外键以及relationship 首先创建数据库,在这里一个user对应多个address,因此需要在address上增 ...
- sqlalchemy(一)基本操作
sqlalchemy(一)基本操作 sqlalchemy采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型. 安装 需要安装MySQLdb pip install ...
- python SQLAlchemy
这里我们记录几个python SQLAlchemy的使用例子: 如何对一个字段进行自增操作 user = session.query(User).with_lockmode('update').get ...
- Python-12-MySQL & sqlalchemy ORM
MySQL MySQL相关文章这里不在赘述,想了解的点击下面的链接: >> MySQL安装 >> 数据库介绍 && MySQL基本使用 >> MyS ...
- 20.Python笔记之SqlAlchemy使用
Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ...
随机推荐
- 浅谈Runloop
RunLoop 是 iOS 和 OS X 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理.之后会介绍一下在 iOS 中,苹果是如何 ...
- 转载《Android Adapter简单总结》
1.概念 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带.在常见的View(List View,Grid View)等地方都需要用到Adapter.如下 ...
- 开始写Effective系列总结一些前端的心得
确实是没有时间整理以及总结和发表自己的感慨.难得中秋银行的事情搞完了自己清闲3天,是时候总结一下从大公司做.NET PC 端网站的开发到现在做移动互联网的银行及政府微信公众号的开发的感触.当时自己的选 ...
- oracle参数配置
一.Oracle LARGE_POOL_SIZE大小设置值多少 java_pool_size:以字节为单位, 指定 Java 存储池的大小, 它用于存储 Java 的方法和类定义在共享内存中的表示法, ...
- ajax 页面加载
大体说说思路,不上代码了: 1.点击加载更多-> ajax向后台传参(当前页page,必须有默认1,其他需要的参数...) 2.后台接收 -> 查询数据 处理形成 json数据 给前台 3 ...
- uploadfy api中文文档
Uploadify是一款基于JQuery的优秀的文件/图片上传的插件,有基于Flash和HTML5两种版本. Uploadify/uploadifive主要特点有:1. 多文件上传2. 个性化设置3. ...
- ODOO-10.0 错误 Could not execute command 'lessc'
2017-01-05 20:24:12,473 4652 INFO None odoo.service.db: Create database `hello`. 2017-01-05 20:24:16 ...
- spring data mongodb 配置遇到的几个问题
一. mongodb 2.2版本以上的配置 spring.data.mongodb.uri = mongodb://newlook:newlook@192.168.0.109:27017/admin ...
- 微信网页授权snsapi_base、snsapi_userinfo的问题
微信网页授权SCOPE分为snsapi_base.snsapi_userinfo,前者是用户无感知的静默授权只能拿到openid:而后者需要用户确认,能拿到更多的用户信息. 我有一个系统需要进行网页授 ...
- iscsi与multipath
2016-10-01/21:07:24 http://www.cnblogs.com/wuchanming/p/4019660.htmlhttp://czmmiao.iteye.com/blog/20 ...