Sqlalchemy orm使用 - littleboy12580/learning_python GitHub Wiki
介绍
SQLAlchemy ORM(Object Relational Mapper)是一种将用户自定义的Python类与数据表连接起来的方法;它通过将表的列映射为类的属性来创建对应关系。
使用方法
与数据库的连接
from sqlalchemy import create_engine
engine = create_engine(mysql://root:iop890iop890@localhost/first_database)
上面的代码建立了与后端的一个名为first_database的数据库的连接,但在ORM中我们并不会直接用engine,而是将其放到幕后。
create_engine()函数的参数意义
首先的mysql表示数据库用的是mysql,root则是访问该数据库的账号,iop890iop890是密码,localhost/first_database则是数据库地址
声明一个映射
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
上述代码构建了一个声明基类,通过继承这个基类可以创建Python类与数据表的映射,例如下面的代码创建了一个User类并映射成了一个数据表
from sqlalchemy import Column,Integer,String
class User(Base):
__tablename__ = 'users'
id = Column('id',Interger,primary_key=True)
name = Column('name',String(20))
password = Column('password',String(20))
创建数据库
Base.metadata.create_all(engine)
创建实例
first_user = User(id=1,name='user1',password='123456')
second_user = User(id=2,name='user2',password='qwerty')
创建会话
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
db_session = Session()
首先通过sessionmaker函数创建Session类,该类与最开始创建的engine进行连接,创建会话实例,通过会话中的操作来改变数据库中的内容。
真正的创建数据
db_session.add(first_user)
db_session.add(second_user)
db_session.commit()
db_session.close()
整体步骤
通过上述代码我们真正的对后台的数据库进行了改变,添加了User表并添加了两个实例。
整体的操作代码为:
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Interger,String
from sqlalchemy.orm import sessionmaker
engine = create_engine(mysql://root:iop890iop890@localhost/first_database)
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column('id',Interger,primary_key=True)
name = Column('name',String(20))
password = Column('password',String(20))
first_user = User(id=1,name='user1',password='123456')
second_user = User(id=2,name='user2',password='qwerty')
Session = sessionmaker(bind=engine)
db_session = Session()
db_session.add(first_user)
db_session.add(second_user)
db_session.commit()
db_session.close()
Query
可以通过Session.query()函数来创建query队列,返回的形式是元祖
for instance in db_session.query(User).order_by(User.id):
print(instance.name,instance.password)
query一般是和filter配合使用,例如过滤找到名字为user1的用户实例
user = db_session.query(User).\
filter(User.name=='user1').\
first()
使用sqlalchemy执行sql语句
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
engine = create_engine('postgresql+psycopg2://group:[email protected]:5432/group')
# '数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'
DB_Session = sessionmaker(bind=engine)
db_session = DB_Session()
id = 123456
result = db_session.execute('select * from post_deleted where id =%s ' % id).first()