教大家使用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 31 Python
pandas多级分组实现排序的方法
Apr 20 Python
解决pandas 作图无法显示中文的问题
May 24 Python
python将字符串以utf-8格式保存在txt文件中的方法
Oct 30 Python
pycharm在调试python时执行其他语句的方法
Nov 29 Python
python3在同一行内输入n个数并用列表保存的例子
Jul 20 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
Nov 16 Python
Numpy之reshape()使用详解
Dec 26 Python
Python验证码截取识别代码实例
May 16 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
Jul 07 Python
python 中的9个实用技巧,助你提高开发效率
Aug 30 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
Jan 01 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
百事可乐也出咖啡了 双倍咖啡因双倍快乐
2021/03/03 咖啡文化
PHP设计模式之解释器模式的深入解析
2013/06/13 PHP
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
2014/06/06 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
表单项的name命名为submit、reset引起的问题
2007/12/22 Javascript
仿新浪微博返回顶部的jquery实现代码
2012/10/01 Javascript
解决JS中乘法的浮点错误的方法
2014/01/03 Javascript
javascript事件冒泡详解和捕获、阻止方法
2014/04/12 Javascript
node+express+jade制作简单网站指南
2014/11/26 Javascript
javascript实现简单的贪吃蛇游戏
2015/03/31 Javascript
chrome调试javascript详解
2015/10/21 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
JavaScript字符串对象
2017/01/14 Javascript
jQuery实现选中行变色效果(实例讲解)
2017/07/06 jQuery
Angular实现的简单定时器功能示例
2017/12/28 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
利用Python自动监控网站并发送邮件告警的方法
2016/08/24 Python
python web自制框架之接受url传递过来的参数实例
2018/12/17 Python
pycharm重命名文件的方法步骤
2019/07/29 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
python中数字是否为可变类型
2020/07/08 Python
Python logging模块原理解析及应用
2020/08/13 Python
python asyncio 协程库的使用
2021/01/21 Python
工艺工程师工作职责
2013/11/23 职场文书
四议两公开实施方案
2014/03/28 职场文书
数学教研活动总结
2014/07/02 职场文书
现场活动策划方案
2014/08/22 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
私用公车造成事故检讨书
2014/11/16 职场文书
个人借款协议书范本
2014/11/17 职场文书
护士长2015年终工作总结
2015/04/24 职场文书
房屋买卖定金协议书
2016/03/21 职场文书
银行求职信怎么写
2019/06/20 职场文书
导游词之贵州织金洞
2019/10/12 职场文书