教大家使用Python SqlAlchemy


Posted in Python onFebruary 12, 2016

本文实例解析Python SqlAlchemy的使用方法,分享给大家供大家参考,具体内容如下

1.初始化连接

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
engine = create_engine('mysql://pass@localhost/test'echo=True)
DBSession = sessionmaker(bind=engine)
session = DBSession()
ret=session.execute('desc user')
print ret
# print ret.fetchall()
print ret.first()

mysql://root:pass/test
root是用户名 pass密码 test数据库
session相当于MySQLdb里面的游标
first 相当于fetchone
echo=True 会输出所有的sql

2.创建表

from sqlalchemy import Column
from sqlalchemy.types import *
from sqlalchemy.ext.declarative import declarative_base

BaseModel = declarative_base()

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine('mysql://root:Hs2BitqLYKoruZJbT8SV@localhost/test')
DBSession = sessionmaker(bind=engine)


class User(BaseModel):
  __tablename__ = 'user1' # 表名
  user_name = Column(CHAR(30), primary_key=True)
  pwd = Column(VARCHAR(20), default='aaa', nullable=False)
  age = Column(SMALLINT(), server_default='12')
  accout = Column(INT())
  birthday = Column(TIMESTAMP())
  article = Column(TEXT())
  height = Column(FLOAT())


def init_db():
  '''
  初始化数据库
  :return:
  '''
  BaseModel.metadata.create_all(engine)


def drop_db():
  '''
  删除所有数据表
  :return:
  '''
  BaseModel.metadata.drop_all(engine)


drop_db()
init_db()

和django的 ORM一样 一旦表被创建了,修改User类不能改变数据库结构,只能用sql语句或删除表再创建来修改数据库结构
sqlalchemy.types里面有所有的数据字段类型,等于sql类型的大写
default参数是插入数据的时候,sqlalchemy自己处理的,server_default才是让mysql处理的

3.添加记录

user1=User(user_name='lujianxing',accout=1245678)
session.add(user1)
session.commit()

要commit才能起作用

4.更新记录
1).更新单条记录

query = session.query(User) 
user = query.get('lujianxing11')
print user.accout
user.accout='987'
session.flush()

2).更新多条记录

query = session.query(User)
query.filter(User.user_name=='lujianxing2').update({User.age: '15'})
query.filter(User.user_name=='lujianxing2').update({'age': '16'})
query.filter(User.pwd=='aaa').update({'age': '17'})

5.删除记录

query = session.query(User)
user = query.get('lujianxing11')
session.delete(user)
session.flush()

6.查询

query = session.query(User)
print query # 只显示sql语句,不会执行查询
print query[0] # 执行查询
print query.all() # 执行查询
print query.first() # 执行查询
for user in query: # 执行查询
  print user.user_name

如果字段的类型是数字型,查询出来的type也是数字型的,不是字符串
高级一点的查询:

# 筛选
user = query.get(1) # 根据主键获取
print query.filter(User.user_name == 2) # 只显示sql语句,不会执行查询
print query.filter(User.user_name == 'lujianxing').all() # 执行查询
print query.filter(User.user_name == 'lujianxing', User.accout == 1245678, User.age > 10).all() # 执行查询
print query.filter(User.user_name == 'lujianxing').filter(User.accout == 1245678).all()
print query.filter("user_name = 'lujianxing'").all() # 执行查询
print query.filter("user_name = 'lujianxing' and accout=1245678").all() # 执行查询
query2 = session.query(User.user_name) # 返回的结果不是User的实例,而是元组
print query2.all() # 执行查询
print query2.offset(1).limit(1).all() # 等于 limit 1,1
# 排序
print query2.order_by(User.user_name).all() 
print query2.order_by('user_name').all() 
print query2.order_by(User.user_name.desc()).all()
print query2.order_by(User.user_name, User.accout.desc()).all()
print query2.filter("user_name = 'lujianxing' and accout=1245678").count()
# 聚合查询
print session.query(func.count('*')).select_from(User).scalar()
print session.query(func.count('1')).select_from(User).scalar()
print session.query(func.count(User.id)).scalar()
print session.query(func.count('*')).filter(User.id > 0).scalar() # filter() 中包含 User,因此不需要指定表
print session.query(func.count('*')).filter(User.name == 'a').limit(1).scalar() == 1 # 可以用 limit() 限制 count() 的返回数
print session.query(func.sum(User.id)).scalar()
print session.query(func.now()).scalar() # func 后可以跟任意函数名,只要该数据库支持
print session.query(func.current_timestamp()).scalar()
print session.query(func.md5(User.name)).filter(User.id == 1).scalar()

以上就是关于Python SqlAlchemy的使用方法介绍,希望对大家的学习有所帮助。

Python 相关文章推荐
python获得两个数组交集、并集、差集的方法
Mar 27 Python
举例讲解Python中装饰器的用法
Apr 27 Python
python 把数据 json格式输出的实例代码
Oct 31 Python
Python max内置函数详细介绍
Nov 17 Python
Python 实现淘宝秒杀的示例代码
Jan 02 Python
python微信公众号之关注公众号自动回复
Oct 25 Python
python通过ffmgep从视频中抽帧的方法
Dec 05 Python
Python实现DDos攻击实例详解
Feb 02 Python
基于python实现蓝牙通信代码实例
Nov 19 Python
Pytorch生成随机数Tensor的方法汇总
Sep 09 Python
Python爬虫抓取论坛关键字过程解析
Oct 19 Python
python迷宫问题深度优先遍历实例
Jun 20 Python
理解Python垃圾回收机制
Feb 12 #Python
一步步解析Python斗牛游戏的概率
Feb 12 #Python
常用python编程模板汇总
Feb 12 #Python
python黑魔法之参数传递
Feb 12 #Python
python实现井字棋游戏
Mar 30 #Python
python搭建微信公众平台
Feb 09 #Python
Python实例一个类背后发生了什么
Feb 09 #Python
You might like
php判断类是否存在函数class_exists用法分析
2014/11/14 PHP
PHP进程通信基础之信号量与共享内存通信
2017/02/19 PHP
php判断/计算闰年的方法小结【三种方法】
2019/07/06 PHP
通过MSXML2自动获取QQ个人头像及在线情况(给初学者)
2007/01/22 Javascript
jQuery 定时局部刷新(setInterval)
2010/11/19 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
2015/08/04 Javascript
jQuery 选择器(61种)整理总结
2016/09/26 Javascript
Bootstrap按钮组简单实现代码
2017/03/06 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
thinkjs 文件上传功能实例代码
2017/11/08 Javascript
详解Vue SPA项目优化小记
2018/07/03 Javascript
JavaScript对象的浅拷贝与深拷贝实例分析
2018/07/25 Javascript
解决vue attr取不到属性值的问题
2018/09/18 Javascript
Layui 动态禁止select下拉的例子
2019/09/03 Javascript
Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign)
2019/11/21 Javascript
vue 限制input只能输入正数的操作
2020/08/05 Javascript
vue组件入门知识全梳理
2020/09/21 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
2020/09/21 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
python字典基本操作实例分析
2015/07/11 Python
Swift中的协议(protocol)学习教程
2016/07/08 Python
Python+matplotlib绘制不同大小和颜色散点图实例
2018/01/19 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
2018/01/27 Python
python模糊图片过滤的方法
2018/12/14 Python
opencv 获取rtsp流媒体视频的实现方法
2019/08/23 Python
python函数不定长参数使用方法解析
2019/12/14 Python
什么是Python变量作用域
2020/06/03 Python
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
明信片寄语大全
2014/04/08 职场文书
销售2014年度工作总结
2014/12/08 职场文书
幼师辞职信范文
2015/02/27 职场文书
2015年污水处理厂工作总结
2015/05/26 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
解决Navicat for Mysql连接报错1251的问题(连接失败)
2021/05/27 MySQL
dubbo集成zipkin获取Traceid的实现
2021/07/26 Java/Android