教大家使用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实现简单拆分PDF文件的方法
Jul 30 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
Dec 25 Python
一张图带我们入门Python基础教程
Feb 05 Python
怎么使用pipenv管理你的python项目
Mar 12 Python
Python3实现腾讯云OCR识别
Nov 27 Python
对python中的float除法和整除法的实例详解
Jul 20 Python
Python实现决策树并且使用Graphviz可视化的例子
Aug 09 Python
用Python生成HTML表格的方法示例
Mar 06 Python
keras 使用Lambda 快速新建层 添加多个参数操作
Jun 10 Python
基于CentOS搭建Python Django环境过程解析
Aug 24 Python
Python中的套接字编程是什么?
Jun 21 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Apr 04 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实现快钱支付功能(涉及到接口)
2013/07/01 PHP
使用php测试硬盘写入速度示例
2014/01/27 PHP
ThinkPHP提交表单时默认自动转义的解决方法
2014/11/25 PHP
Ext面向对象开发实践(续)
2008/11/18 Javascript
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
Underscore.js 1.3.3 中文注释翻译说明
2015/06/25 Javascript
JavaScript实现数组随机排序的方法
2015/06/26 Javascript
jQuery实现点击表格单元格就可以编辑内容的方法【测试可用】
2016/08/01 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
微信小程序 setData的使用方法详解
2017/04/20 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
webpack4.x开发环境配置详解
2018/08/04 Javascript
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
微信小程序3D轮播实现代码
2019/09/19 Javascript
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
JS函数参数的传递与同名参数实例分析
2020/03/16 Javascript
js+css3实现简单时钟特效
2020/09/13 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
2020/10/24 Javascript
微信小程序实现加入购物车滑动轨迹
2020/11/18 Javascript
尝试用最短的Python代码来实现服务器和代理服务器
2016/06/23 Python
python机器学习理论与实战(四)逻辑回归
2018/01/19 Python
win7+Python3.5下scrapy的安装方法
2018/07/31 Python
对python读写文件去重、RE、set的使用详解
2018/12/11 Python
详解Python循环作用域与闭包
2019/03/21 Python
Python实现线性判别分析(LDA)的MATLAB方式
2019/12/09 Python
Python ArgumentParse的subparser用法说明
2020/04/20 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
心理健康心得体会
2014/01/02 职场文书
称象教学反思
2014/02/03 职场文书
不打扫卫生检讨书
2014/02/12 职场文书
家长会演讲稿
2014/04/26 职场文书
高中体育课教学反思
2016/02/16 职场文书