教大家使用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来编写HTTP服务器的超级指南
Feb 18 Python
Python实现基本数据结构中栈的操作示例
Dec 04 Python
python @property的用法及含义全面解析
Feb 01 Python
Python之读取TXT文件的方法小结
Apr 27 Python
python实现爬取图书封面
Jul 05 Python
Python 利用pydub库操作音频文件的方法
Jan 09 Python
pygame实现俄罗斯方块游戏(基础篇1)
Oct 29 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
Nov 07 Python
python装饰器的特性原理详解
Dec 25 Python
Python3标准库glob文件名模式匹配的问题
Mar 13 Python
python不到50行代码完成了多张excel合并的实现示例
May 28 Python
Django 实现 Websocket 广播、点对点发送消息的代码
Jun 03 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
PHP4 与 MySQL 数据库操作函数详解
2006/10/09 PHP
PHP 巧用数组降低程序的时间复杂度
2010/01/01 PHP
php时间戳转换代码详解
2019/08/04 PHP
JavaScript 对象的属性和方法4种不同的类型
2010/03/19 Javascript
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
jQuery的Scrollify插件实现滑动到页面下一节点
2015/07/05 Javascript
使用javaScript动态加载Js文件和Css文件
2015/10/24 Javascript
js css+html实现简单的日历
2016/07/14 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
webpack打包单页面如何引用的js
2017/06/07 Javascript
JS判断微信扫码的方法
2017/08/07 Javascript
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
vue component 中引入less文件报错 Module build failed
2019/04/17 Javascript
layUI实现前端分页和后端分页
2019/07/27 Javascript
layui 阻止图片上传的实例(before方法)
2019/09/26 Javascript
javascript实现前端input密码输入强度验证
2020/06/24 Javascript
[29:10]Ti4 冒泡赛第二天 NEWBEE vs Titan 3
2014/07/15 DOTA
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
python 提取tuple类型值中json格式的key值方法
2018/12/31 Python
python+pyqt5编写md5生成器
2019/03/18 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
2019/07/09 Python
pycharm 安装JPype的教程
2019/08/08 Python
python读取raw binary图片并提取统计信息的实例
2020/01/09 Python
python 实现将Numpy数组保存为图像
2020/01/09 Python
Python操作Jira库常用方法解析
2020/04/10 Python
keras用auc做metrics以及早停实例
2020/07/02 Python
Python Selenium实现无可视化界面过程解析
2020/08/25 Python
唤醒头发毛囊的秘密武器:Grow Gorgeous
2016/08/28 全球购物
Travelstart沙特阿拉伯:廉价航班、豪华酒店和实惠的汽车租赁优惠
2019/04/06 全球购物
董事长秘书职责
2014/01/31 职场文书
领导干部保密承诺书
2014/08/30 职场文书
高一学年自我鉴定范文(3篇)
2014/09/26 职场文书
审美与表现自我评价
2015/03/09 职场文书
应届毕业生的自我评价
2019/06/21 职场文书
mybatis中sql语句CDATA标签的用法说明
2021/06/30 Java/Android