#!/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的更多相关文章

  1. sqlalchemy学习

    sqlalchemy官网API参考 原文作为一个Pythoner,不会SQLAlchemy都不好意思跟同行打招呼! #作者:笑虎 #链接:https://zhuanlan.zhihu.com/p/23 ...

  2. tornado+sqlalchemy+celery,数据库连接消耗在哪里

    随着公司业务的发展,网站的日活数也逐渐增多,以前只需要考虑将所需要的功能实现就行了,当日活越来越大的时候,就需要考虑对服务器的资源使用消耗情况有一个清楚的认知.     最近老是发现数据库的连接数如果 ...

  3. 冰冻三尺非一日之寒-mysql(orm/sqlalchemy)

    第十二章  mysql ORM介绍    2.sqlalchemy基本使用 ORM介绍: orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似pyt ...

  4. Python 【第六章】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  5. SQLAlchemy(一)

    说明 SQLAlchemy只是一个翻译的过程,我们通过类来操作数据库,他会将我们的对应数据转换成SQL语句. 运用ORM创建表 #!/usr/bin/env python #! -*- coding: ...

  6. sqlalchemy(二)高级用法

    sqlalchemy(二)高级用法 本文将介绍sqlalchemy的高级用法. 外键以及relationship 首先创建数据库,在这里一个user对应多个address,因此需要在address上增 ...

  7. sqlalchemy(一)基本操作

    sqlalchemy(一)基本操作 sqlalchemy采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型. 安装 需要安装MySQLdb pip install ...

  8. python SQLAlchemy

    这里我们记录几个python SQLAlchemy的使用例子: 如何对一个字段进行自增操作 user = session.query(User).with_lockmode('update').get ...

  9. Python-12-MySQL & sqlalchemy ORM

    MySQL MySQL相关文章这里不在赘述,想了解的点击下面的链接: >> MySQL安装 >> 数据库介绍 && MySQL基本使用 >> MyS ...

  10. 20.Python笔记之SqlAlchemy使用

    Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ...

随机推荐

  1. 周末发现一个BUG,时有时无,一出程序就崩溃,郁闷了好久,终于跟出来来了,记之,提醒自己今后一定规范编写,只要规范,绝对不会出问题

    -- :::] cell0 create -- :::] *** Assertion failure /UITableView.m: -- :::] [ Uncaught Exception ] Na ...

  2. thinkphp在模型中自动完成session赋值

    相信用过thinkphp的用户都知道thinkphp的模型可以完成很多辅助功能,比 如自动验证.自动完成等,今天在开发中遇到自动完成中需要获取session值 然后自动赋值的功能,具体看代码:clas ...

  3. libgcc_s.so.1 must be installed for pthread_cancel to work

    首先 whereis 看一下 有没有 libgcc_s.so.1 有的话 记得gcc --o xxx xxx.c -lpthread -lgcc_s

  4. Debian普通用户获取root权限|sudo的安装与配置

    Debian系统的普通用户需要安装软件时,往往会收到“Permission denied”的提示,这时候需要root权限.那么如何在不登陆超级管理员账户的前提下拥有root权限呢?对于大多数Linux ...

  5. Linux测试环境部署jdk(一)

    安装配置JDK yum install -y lrzsz  安装rz,方便xshell上传下载文件 Jdk: jdk-6u1-linux-i586 Tomcat: apache-tomcat-7.0. ...

  6. mfc 调用Windows的API函数实现同步异步串口通信(源码)

    在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信方便易行,应用广泛. 一般情况下,工控机和各智能仪表通过RS485总线进行通信.RS485的通信方式是半 ...

  7. (转)Three challenges you’re going to face when building a chatbot

        转自:https://blog.infermedica.com/three-challenges-youre-going-to-face-when-building-a-chatbot/   ...

  8. 随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比、实现对比[转]

    梯度下降(GD)是最小化风险函数.损失函数的一种常用方法,随机梯度下降和批量梯度下降是两种迭代求解思路,下面从公式和实现的角度对两者进行分析,如有哪个方面写的不对,希望网友纠正. 下面的h(x)是要拟 ...

  9. Zend Studio 中安装emmet插件的方法

    本人的Zend Studio版本是Zend Studio 10.0.0. 1. 打开Zend Studio,点击 Help --> Install New Software,如下图: 2.  在 ...

  10. php 一些经常用到的方法

    获取当前url地址 /** * 获取当前url * @author Red * @date * @return string */ function getRequestURL() { if (!is ...