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 一. ...
随机推荐
- echarts图表标签(axisLabel)折行
在项目中遇到了一个echarts图表标签过长需折行的需求,so引出这篇总结,啦啦啦有帮助就多多支持啦,撒花撒花撒花~~~~ 在此不对echarts其他用法做解释,详细见echarts文档(点击前往) ...
- Surprise团队第一周项目总结
Surprise团队第一周项目总结 团队项目 基本内容 五子棋(Gobang)的开发与应用 利用Android Studio设计一款五子棋游戏,并丰富其内涵 预期目标 实现人人模式:2个用户可以在同一 ...
- java程序链接到sql server数据库
package jianhua; import java.sql.*; public class ConDatabase { public static void main(String[] args ...
- 3.基础点的移动web
1.移动端的屏幕适配 在Web开发中可以使用px(像素).em.pt(点).in(英寸).cm(厘米)做为长度单位,我们最常用px(像素)做为长度单位. 我们可以将上述的几种长度单位划分成相对长度单位 ...
- Codeforces Round #361 Jul.6th B题 ☺译
最近迈克忙着考前复习,他希望通过出门浮躁来冷静一下.迈克所在的城市包含N个可以浮躁的地方,分别编号为1..N.通常迈克在家也很浮躁,所以说他家属于可以浮躁的地方并且编号为1.迈克从家出发,去一些可以浮 ...
- kuangbin_SegTree I (HDU 1540)
做完D之后我信誓旦旦以为之后就只剩一个二维就能攻克线段树了 看来也跟图论一样全是模板嘛 然后我打开了I题一眼看下去似乎直接用线段树记录sum然后跟区间长度比较然后处理一下实现也不难 两个小时后:特么的 ...
- glusterfs 内存管理方式
glusterfs中的内存管理方式: 首先来看看glusterfs的内存管理结构吧: struct mem_pool { struct list_head list; int hot_count; i ...
- TD Rigging Demo Reel 性感美女绑定展示
161455520158189 这是一个充满回忆的Demo,非常怀念之前的工作生活,也特别感谢我长春的老哥张总对我的帮助与指导,不光是工作中,在生活上也让我有很大的收获.这个一直都觉得做的不够好,也从 ...
- 查看旧版jexus命令
查看jexus版本 curl http://localhost/info
- Torch 网络层 参数的初始化问题
Torch 网络层 参数的初始化问题 参考链接: https://github.com/Kaixhin/nninit 从 Torch 中自带的包,可以看到:https://github.com/tor ...