教大家使用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爬虫之使用urllib2组件抓取网页内容
Nov 04 Python
python传递参数方式小结
Apr 17 Python
Django实现图片文字同时提交的方法
May 26 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
May 08 Python
Python实现OpenCV的安装与使用示例
Mar 30 Python
Python从Excel中读取日期一列的方法
Nov 28 Python
Python实现的拉格朗日插值法示例
Jan 08 Python
python 调用钉钉机器人的方法
Feb 20 Python
浅谈PySpark SQL 相关知识介绍
Jun 14 Python
解决.ui文件生成的.py文件运行不出现界面的方法
Jun 19 Python
将matplotlib绘图嵌入pyqt的方法示例
Jan 08 Python
使用python接受tgam的脑波数据实例
Apr 09 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
从零开始 教你如何搭建Discuz!4.1论坛
2006/07/07 PHP
php计算函数执行时间的方法
2015/03/20 PHP
laravel框架中间件 except 和 only 的用法示例
2019/07/12 PHP
Laravel 5.5 异常处理 & 错误日志的解决
2019/10/17 PHP
javascript 变量作用域 代码分析
2009/06/26 Javascript
jQuery中jqGrid分页实现代码
2011/11/04 Javascript
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
2012/08/24 Javascript
使用简洁的jQuery方法实现隔行换色功能
2014/01/02 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
js去字符串前后空格的实现方法
2016/02/26 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
angularjs中ng-attr的用法详解
2016/12/31 Javascript
基于JavaScript实现屏幕滚动效果
2017/01/18 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
基于substring()和substr()的使用以及区别(实例讲解)
2017/12/28 Javascript
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
JS实现统计字符串中字符出现个数及最大个数功能示例
2018/06/04 Javascript
python学习笔记之调用eval函数出现invalid syntax错误问题
2015/10/18 Python
Python如何判断数独是否合法
2016/09/08 Python
Python数据类型之Tuple元组实例详解
2019/05/08 Python
Python爬虫学习之翻译小程序
2019/07/30 Python
pygame实现贪吃蛇游戏(下)
2019/10/29 Python
使用Python的Turtle绘制哆啦A梦实例
2019/11/21 Python
Python求平面内点到直线距离的实现
2020/01/19 Python
python+selenium+Chrome options参数的使用
2020/03/18 Python
keras中epoch,batch,loss,val_loss用法说明
2020/07/02 Python
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
CHARLES & KEITH台湾官网:新加坡时尚品牌
2019/07/30 全球购物
描述内存分配方式以及它们的区别
2016/10/15 面试题
元旦晚会邀请函
2014/02/01 职场文书
质量整改报告范文
2014/11/08 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
离婚案件被告代理词
2015/05/23 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书
Django中session进行权限管理的使用
2021/07/09 Python
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL