教大家使用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提示[Errno 32]Broken pipe导致线程crash错误解决方法
Nov 19 Python
python中的代码编码格式转换问题
Jun 10 Python
Python利用operator模块实现对象的多级排序详解
May 09 Python
利用python批量修改word文件名的方法示例
Oct 17 Python
win10下tensorflow和matplotlib安装教程
Sep 19 Python
对python插入数据库和生成插入sql的示例讲解
Nov 14 Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
Jan 30 Python
wxpython多线程防假死与线程间传递消息实例详解
Dec 13 Python
Python基础之字典常见操作经典实例详解
Feb 26 Python
Python如何创建装饰器时保留函数元信息
Aug 07 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
Sep 20 Python
python中scipy.stats产生随机数实例讲解
Feb 19 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
六酷社区论坛HOME页清新格调免费版 下载
2007/03/07 PHP
php addslashes和mysql_real_escape_string
2010/01/24 PHP
简单的PHP多图上传小程序代码
2011/07/17 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
PHP的Socket通信之UDP通信实例
2015/07/02 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
基于ThinkPHP实现的日历功能实例详解
2017/04/15 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
JavaScript CSS修改学习第五章 给“上传”添加样式
2010/02/19 Javascript
MyEclipse取消验证Js的两种方法
2013/11/14 Javascript
JS取request值以及自动执行使用示例
2014/02/24 Javascript
深入探寻seajs的模块化与加载方式
2015/04/14 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
js中获取时间new Date()的全面介绍
2016/06/20 Javascript
Three.js开发实现3D地图的实践过程总结
2017/11/20 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
2018/05/13 Javascript
微信小程序全局变量的设置、使用、修改过程解析
2019/09/24 Javascript
Python实现的HTTP并发测试完整示例
2020/04/23 Python
Python中super的用法实例
2015/05/28 Python
Python常用小技巧总结
2015/06/01 Python
利用python程序帮大家清理windows垃圾
2017/01/15 Python
详谈python在windows中的文件路径问题
2018/04/28 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
python-docx文件定位读取过程(尝试替换)
2020/02/13 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
html5本地存储_动力节点Java学院整理
2017/07/12 HTML / CSS
HTML5注册页面示例代码
2014/03/27 HTML / CSS
宝拉珍选美国官网:Paula’s Choice美国
2018/01/07 全球购物
班长演讲稿范文
2014/04/24 职场文书
2015年度电厂个人工作总结
2015/05/13 职场文书
少先队中队工作总结
2015/08/14 职场文书
Python还能这么玩之用Python做个小游戏的外挂
2021/06/04 Python
浅谈Redis中的RDB快照
2021/06/29 Redis
Java对文件的读写操作方法
2022/04/29 Java/Android
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL