教大家使用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基础教程之对象和类的实际运用
Aug 29 Python
python类继承用法实例分析
Oct 10 Python
Python实现计算最小编辑距离
Mar 17 Python
pandas数据分组和聚合操作方法
Apr 11 Python
python实现电脑自动关机
Jun 20 Python
对python内置map和six.moves.map的区别详解
Dec 19 Python
python实现弹跳小球
May 13 Python
在notepad++中实现直接运行python代码
Dec 18 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
Feb 25 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
Mar 30 Python
python中for in的用法详解
Apr 17 Python
基于python实现百度语音识别和图灵对话
Nov 02 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 文件系统详解
2012/09/13 PHP
php读取excel文件示例分享(更新修改excel)
2014/02/27 PHP
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
onmouseover和onmouseout的一些问题思考
2013/08/14 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
深入解读JavaScript中的Iterator和for-of循环
2015/07/28 Javascript
基于JS实现省市联动效果代码分享
2016/06/06 Javascript
js实现图片360度旋转
2017/01/22 Javascript
webpack 从指定入口文件中提取公共文件的方法
2018/11/13 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
extjs图形绘制之饼图实现方法分析
2020/03/06 Javascript
[01:08:29]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第一场 1月9日
2021/03/11 DOTA
使用C语言扩展Python程序的简单入门指引
2015/04/14 Python
Python实现快速计算词频功能示例
2018/06/25 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
python绘制动态曲线教程
2020/02/24 Python
python计算Content-MD5并获取文件的Content-MD5值方式
2020/04/03 Python
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
办公室文秘自我鉴定
2013/09/21 职场文书
应用电子技术专业个人求职信
2013/09/21 职场文书
写自荐信有哪些不宜?
2013/10/17 职场文书
店长助理岗位职责
2013/12/13 职场文书
便利店促销方案
2014/02/20 职场文书
2014镇副书记群众路线专题民主生活会思想汇报
2014/09/23 职场文书
党员干部作风建设思想汇报范文
2014/10/25 职场文书
租车协议书范本2014
2014/11/17 职场文书
淘宝文案策划岗位职责
2015/04/14 职场文书
新郎接新娘保证书
2015/05/08 职场文书
跑出一片天观后感
2015/06/08 职场文书
python迷宫问题深度优先遍历实例
2021/06/20 Python
总结Python连接CS2000的详细步骤
2021/06/23 Python
SQL实现LeetCode(177.第N高薪水)
2021/08/04 MySQL
Win11软件图标固定到任务栏
2022/04/19 数码科技