教大家使用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环境配置及项目建立
Jun 30 Python
在python3环境下的Django中使用MySQL数据库的实例
Aug 29 Python
Python网络编程 Python套接字编程
Sep 13 Python
浅谈python中列表、字符串、字典的常用操作
Sep 19 Python
python验证码识别的示例代码
Sep 21 Python
Python内置函数——__import__ 的使用方法
Nov 24 Python
python学生信息管理系统
Mar 13 Python
python socket网络编程之粘包问题详解
Apr 28 Python
python 实现快速生成连续、随机字母列表
Nov 28 Python
pandas实现将日期转换成timestamp
Dec 07 Python
python生成xml时规定dtd实例方法
Sep 21 Python
详解Python小数据池和代码块缓存机制
Apr 07 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/05/10 PHP
适合PHP初学者阅读的4本经典书籍
2016/09/23 PHP
PHP实现的常规正则验证helper公共类完整实例
2017/04/27 PHP
解决 firefox 不支持 document.all的方法
2007/03/12 Javascript
jquery json 实例代码
2010/12/02 Javascript
Chrome中JSON.parse的特殊实现
2011/01/12 Javascript
JS获取当前网页大小以及屏幕分辨率等
2014/09/05 Javascript
DOM基础教程之模型中的模型节点
2015/01/19 Javascript
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
jQuery实现360°全景拖动展示
2015/03/18 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
2016/12/08 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
jquery滚动条插件slimScroll使用方法
2017/02/09 Javascript
微信小程序城市定位的实现实例(获取当前所在国家城市信息)
2017/05/17 Javascript
详解vue-cli项目中用json-sever搭建mock服务器
2017/11/02 Javascript
基于 Vue.js 之 iView UI 框架非工程化实践记录(推荐)
2017/11/21 Javascript
vue和webpack打包项目相对路径修改的方法
2018/06/15 Javascript
浅谈Vue组件及组件的注册方法
2018/08/24 Javascript
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
egg.js的基本使用和调用数据库的方法示例
2019/05/18 Javascript
vue实现pdf文档在线预览功能
2019/11/26 Javascript
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
centos6.4下python3.6.1安装教程
2017/07/21 Python
PyCharm代码格式调整方法
2018/05/23 Python
使用python爬虫获取黄金价格的核心代码
2018/06/13 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
2019/04/25 Python
Python 把序列转换为元组的函数tuple方法
2019/06/27 Python
python实现自动清理重复文件
2020/08/24 Python
美国在线鲜花速递:ProFlowers
2017/01/05 全球购物
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
电视节目策划方案
2014/05/16 职场文书
任命书怎么写
2014/06/04 职场文书
优秀党员先进事迹材料
2014/12/18 职场文书
防汛通知
2015/04/25 职场文书
同学联谊会邀请函
2019/06/24 职场文书
如何写一份具有法律效力的借款协议书?
2019/07/02 职场文书