教大家使用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 相关文章推荐
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
Sep 21 Python
使用python和Django完成博客数据库的迁移方法
Jan 05 Python
python机器学习理论与实战(一)K近邻法
Jan 28 Python
Python实现按中文排序的方法示例
Apr 25 Python
对python pandas 画移动平均线的方法详解
Nov 28 Python
使用PyCharm进行远程开发和调试的实现
Nov 04 Python
浅谈Pycharm最有必要改的几个默认设置项
Feb 14 Python
利用Python制作动态排名图的实现代码
Apr 09 Python
opencv 图像礼帽和图像黑帽的实现
Jul 07 Python
BeautifulSoup中find和find_all的使用详解
Dec 07 Python
python中的class_static的@classmethod的巧妙用法
Jun 22 Python
python基础之类方法和静态方法
Oct 24 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解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
PHP类中的魔术方法(Magic Method)简明总结
2014/07/08 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
2016/07/20 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
HTML中事件触发列表与解说
2007/07/09 Javascript
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
JQuery中阻止事件冒泡几种方式及其区别介绍
2014/01/15 Javascript
js实现div闪烁原理及实现代码
2014/06/24 Javascript
Node.js DES加密的简单实现
2016/07/07 Javascript
ES6新特征数字、数组、字符串
2016/10/01 Javascript
微信js-sdk预览图片接口及从拍照或手机相册中选图接口用法示例
2016/10/13 Javascript
JS判断输入的字符串是否是数字的方法(正则表达式)
2016/11/29 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
jQuery复合事件结合toggle()方法的用法示例
2017/06/10 jQuery
vue-cli中的babel配置文件.babelrc实例详解
2018/02/22 Javascript
React styled-components设置组件属性的方法
2018/08/07 Javascript
vue下使用nginx刷新页面404的问题解决
2019/08/02 Javascript
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
Angular 多级路由实现登录页面跳转(小白教程)
2019/11/19 Javascript
uniapp与webview之间的相互传值的实现
2020/06/29 Javascript
[01:16:01]VGJ.S vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
详细解析Python当中的数据类型和变量
2015/04/25 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
2019/03/29 Python
python实现中文文本分句的例子
2019/07/15 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
python集成开发环境配置(pycharm)
2020/02/14 Python
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
UNIX特点都有哪些
2016/04/05 面试题
股东授权委托书范文
2014/09/13 职场文书
教师节主题班会方案
2015/08/17 职场文书
2016春节放假通知范文
2015/08/18 职场文书
Python基础知识学习之类的继承
2021/05/31 Python
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS
Win11安装升级时提示“该电脑必须支持安全启动”
2022/04/19 数码科技
Django框架中模型的用法
2022/06/10 Python