教大家使用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框架结合MySQL写一个内存监控程序
Nov 07 Python
Python2.7编程中SQLite3基本操作方法示例
Aug 09 Python
Python 实现删除某路径下文件及文件夹的实例讲解
Apr 24 Python
在python tkinter中Canvas实现进度条显示的方法
Jun 14 Python
Python学习笔记之Break和Continue用法分析
Aug 14 Python
Django 框架模型操作入门教程
Nov 05 Python
如何基于Python批量下载音乐
Nov 11 Python
opencv python图像梯度实例详解
Feb 04 Python
浅谈Python线程的同步互斥与死锁
Mar 22 Python
Python3实现打印任意宽度的菱形代码
Apr 12 Python
Python pysnmp使用方法及代码实例
Aug 24 Python
Appium+Python实现简单的自动化登录测试的实现
Jan 26 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
星际中的相关伤害
2020/03/04 星际争霸
php使用标签替换的方式生成静态页面
2015/05/21 PHP
php实现简单的上传进度条
2015/11/17 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
2016/05/22 PHP
DOM相关内容速查手册
2007/02/07 Javascript
基于jQuery试卷自动排版系统
2010/07/18 Javascript
Javascript图像处理思路及实现代码
2012/12/25 Javascript
jquery获取tr中控件值并操作tr实现思路
2013/03/27 Javascript
JavaScript组合拼接字符串的效率对比测试
2014/11/06 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
2015/06/23 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
2015/12/10 Javascript
JS功能代码集锦
2016/05/04 Javascript
JS动态给对象添加事件的简单方法
2016/07/19 Javascript
angularjs2 ng2 密码隐藏显示的实例代码
2017/08/01 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
基于element-ui的rules中正则表达式
2018/09/04 Javascript
vue: WebStorm设置快速编译运行的方法
2018/10/18 Javascript
JavaScript ES6常用基础知识总结
2019/02/09 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
[02:40]DOTA2殁境神蚀者 英雄基础教程
2013/11/26 DOTA
python实现查询IP地址所在地
2015/03/29 Python
Python中使用装饰器时需要注意的一些问题
2015/05/11 Python
python处理按钮消息的实例详解
2017/07/11 Python
python使用递归的方式建立二叉树
2019/07/03 Python
Django框架中序列化和反序列化的例子
2019/08/06 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
2020/04/27 Python
Python数据可视化实现多种图例代码详解
2020/07/14 Python
python 实现aes256加密
2020/11/27 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
阿迪达斯新加坡官方网站:adidas新加坡
2019/12/06 全球购物
新闻编辑求职信
2014/04/09 职场文书
2014年幼儿园园务工作总结
2014/12/05 职场文书
关于EntityWrapper的in用法
2022/03/22 Java/Android