教大家使用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的Flask框架中的signals信号机制
Jun 13 Python
Python实现简易端口扫描器代码实例
Mar 15 Python
django小技巧之html模板中调用对象属性或对象的方法
Nov 30 Python
python 根据时间来生成唯一的字符串方法
Jan 14 Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 Python
python+openCV利用摄像头实现人员活动检测
Jun 22 Python
Python实现K折交叉验证法的方法步骤
Jul 11 Python
python中多个装饰器的调用顺序详解
Jul 16 Python
python循环嵌套的多种使用方法解析
Nov 29 Python
如何基于python对接钉钉并获取access_token
Apr 21 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
Aug 26 Python
一篇文章弄懂Python关键字、标识符和变量
Jul 15 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/05 PHP
JS异常处理try..catch语句的作用和实例
2014/05/05 PHP
几个javascript操作word的参考代码
2009/10/26 Javascript
javascript 面向对象全新理练之继承与多态
2009/12/03 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
jQuery中选择器小问题(新人难免遇到)
2014/03/31 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
javaScript事件机制兼容【详细整理】
2016/07/23 Javascript
js点击任意区域弹出层消失实现代码
2016/12/27 Javascript
基于require.js的使用(实例讲解)
2017/09/07 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
Webpack devServer中的 proxy 实现跨域的解决
2018/06/15 Javascript
boostrap模态框二次弹出清空原有内容的方法
2018/08/10 Javascript
微信小程序实现发送模板消息功能示例【通过openid推送消息给用户】
2019/05/05 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
vue实现动态表格提交参数动态生成控件的操作
2020/11/09 Javascript
[00:14]护身甲盾
2019/03/06 DOTA
python算法学习之基数排序实例
2013/12/18 Python
Python基础之函数用法实例详解
2014/09/10 Python
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
Python matplotlib画图与中文设置操作实例分析
2019/04/23 Python
Python3 字典dictionary入门基础附实例
2020/02/10 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
HTML5 Canvas 实现圆形进度条并显示数字百分比效果示例
2017/08/18 HTML / CSS
HTML5中的Web Notification桌面通知功能的实现方法
2019/07/29 HTML / CSS
Viking比利时:购买办公用品
2019/10/30 全球购物
解释下面关于J2EE的名词
2013/11/15 面试题
安全教育月活动总结
2014/05/05 职场文书
超市开业庆典策划方案
2014/05/14 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
2020年基层司法所建设情况调研报告
2019/11/30 职场文书
python实现图片九宫格分割的示例
2021/04/25 Python