教大家使用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中操作时间之mktime()方法的使用教程
May 22 Python
Python3控制路由器——使用requests重启极路由.py
May 11 Python
网红编程语言Python将纳入高考你怎么看?
Jun 07 Python
python实现黑客字幕雨效果
Jun 21 Python
Python实现基于PIL和tesseract的验证码识别功能示例
Jul 11 Python
Python数据集切分实例
Dec 08 Python
python处理两种分隔符的数据集方法
Dec 12 Python
python腾讯语音合成实现过程解析
Aug 01 Python
python下PyGame的下载与安装过程及遇到问题
Aug 04 Python
python中time库的实例使用方法
Oct 31 Python
协程Python 中实现多任务耗资源最小的方式
Oct 19 Python
使用Python拟合函数曲线
Apr 14 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
手冲咖啡应该是现代精品咖啡店的必备选项吗?
2021/03/03 冲泡冲煮
php pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
PHP类的使用 实例代码讲解
2009/12/28 PHP
PHP中10个不常见却非常有用的函数
2010/03/21 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
ThinkPHP模板范围判断输出In标签与Range标签用法详解
2014/06/30 PHP
php实现压缩合并js的方法【附demo源码下载】
2016/09/22 PHP
Javascript学习笔记4 Eval函数
2010/01/11 Javascript
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
JS简单实现禁止访问某个页面的方法
2016/09/13 Javascript
javascript 正则表达式去空行方法
2017/01/24 Javascript
深入探究AngularJs之$scope对象(作用域)
2017/07/20 Javascript
深入理解JavaScript的值传递和引用传递
2018/10/24 Javascript
vue中多个倒计时实现代码实例
2019/03/27 Javascript
微信小程序页面传多个参数跳转页面的实现方法
2019/05/17 Javascript
微信小程序系列之自定义顶部导航功能
2019/05/21 Javascript
利用JS响应式修改vue实现页面的input值
2019/09/02 Javascript
JS Html转义和反转义(html编码和解码)的实现与使用方法总结
2020/03/10 Javascript
JS删除数组指定值常用方法详解
2020/06/04 Javascript
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
使用Python的package机制如何简化utils包设计详解
2017/12/11 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
python仿抖音表白神器
2019/04/08 Python
pybind11在Windows下的使用教程
2019/07/04 Python
详解Python对JSON中的特殊类型进行Encoder
2019/07/15 Python
Python编写单元测试代码实例
2020/09/10 Python
亚洲最大的眼镜批发商和零售商之一:Glasseslit
2018/10/08 全球购物
WebSphere 应用服务器都支持哪些认证
2013/12/26 面试题
工商管理系学生的自我评价分享
2013/11/29 职场文书
小区门卫岗位职责
2013/12/31 职场文书
感恩母亲节活动方案
2014/03/04 职场文书
工作证明格式及范本
2014/09/12 职场文书
2015年党风廉政建设工作总结
2015/04/09 职场文书
小程序实现筛子抽奖
2021/05/26 Javascript