本文实例解析Python SqlAlchemy的使用方法,分享给大家供大家参考,具体内容如下
1.初始化连接
1
2
3
4
5
6
7
8
9
|
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.创建表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
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.添加记录
1
2
3
|
user1 = User(user_name = 'lujianxing' ,accout = 1245678 )
session.add(user1)
session.commit()
|
要commit才能起作用
4.更新记录
1).更新单条记录
1
2
3
4
5
|
query = session.query(User)
user = query.get( 'lujianxing11' )
print user.accout
user.accout = '987'
session.flush()
|
2).更新多条记录
1
2
3
4
|
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.删除记录
1
2
3
4
|
query = session.query(User)
user = query.get( 'lujianxing11' )
session.delete(user)
session.flush()
|
6.查询
1
2
3
4
5
6
7
|
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也是数字型的,不是字符串
高级一点的查询:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# 筛选
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的使用方法介绍,希望对大家的学习有所帮助。