ORM技术:Object-Relational Mapping,负责把关系数据库的表结构映射到对象上。
1.安装SQLAlchemy模块
pip install sqlalchemy
2.初始化连接
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 from sqlalchemy import Column, create_engine 5 from sqlalchemy.types import * 6 from sqlalchemy.orm import sessionmaker 7 from sqlalchemy.ext.declarative import declarative_base 8 9 # 连接数据库 10 sql_connect = ‘mysql://user:[email protected]:port/database‘ 11 engine = create_engine(sql_connect) 12 # 创建DBSession类型: 13 DBSession = sessionmaker(bind=engine)
注:红色部分:数据库类型://用户名:口令@机器地址:端口号/数据库名.
完整的则为:数据库类型+数据库驱动://用户名:口令@机器地址:端口号/数据库名
3.自动建表
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 from sqlalchemy import Column 5 from sqlalchemy.types import * 6 from sqlalchemy.ext.declarative import declarative_base 7 from sqlalchemy import create_engine 8 from sqlalchemy.orm import sessionmaker 9 10 # 连接数据库 11 sql_connect = ‘mysql://ruser:[email protected]:port/datbase‘ 12 engine = create_engine(sql_connect) 13 DBSession = sessionmaker(bind=engine) 14 # 创建对象的基类: 15 BaseModel = declarative_base() 16 17 #定义对象 18 class User(BaseModel): 19 # 表名 20 __tablename__ = ‘user‘ 21 # 表结构 22 id = Column(String(20), primary_key=True) 23 name = Column(String(20)) 24 age = Column(Integer) 25 26 #初始化数据库 27 def init_db(): 28 BaseModel.metadata.create_all(engine) 29 30 #删除所有数据表 31 def drop_db(): 32 BaseModel.metadata.drop_all(engine)
4.添加数据
1 # 创建session对象,相当于MySQLdb里面的游标 2 session = DBSession() 3 # 创建新User对象: 4 new_user = User(id=‘2‘, name=‘John‘, age=13) 5 # 添加到session: 6 session.add(new_user) 7 # 提交即保存到数据库 8 session.commit() 9 # 关闭session 10 session.close()
5.查询数据
在查询语句中的where子句用filter()替代,不过匹配的值需要用"==";如果使用filter_by(),则使用"="即可。
查询一条:
1 # 创建Session: 2 session = DBSession() 3 # 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行: 4 user = session.query(User).filter(User.name == ‘John‘, User.age > 12).one() 5 # 打印类型和对象的name属性: 6 print ‘type:‘, type(user) 7 print ‘age:‘, user.age 8 # 关闭Session: 9 session.close()
查询多条:
1 1 # 创建Session: 2 2 session = DBSession() 3 3 # 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行: 4 4 users = session.query(User).filter(User.name == ‘John‘).all() 5 5 # 打印类型和对象的name属性: 6 6 print ‘type:‘, type(users) 7 7 for u in users: 8 8 print u.id 9 9 # 关闭Session: 10 10 session.close()
6.更新数据
方式一:
1 # 创建Session: 2 session = DBSession() 3 # 可以进行多条数据更新 4 user = session.query(User).filter(User.id == ‘5‘) 5 user.update({User.age: 14}) 6 # 提交数据 7 session.commit() 8 # 关闭Session 9 session.close()
方式二:
# 创建Session: session = DBSession() # 可以进行多条数据更新 user = session.query(User).filter_by(id=‘5‘).one() user.age = 16 # 提交数据 session.commit() # 关闭Session session.close()
7.删除数据
1 # 创建Session 2 session = DBSession() 3 # 删除哪些数据 4 user = session.query(User).filter(User.id == ‘6‘).one() 5 session.delete(user) 6 # 提交数据 7 session.commit() 8 # 关闭session 9 session.close()
时间: 2024-11-08 17:21:03