SQLAlchemy ORM – 创建会话
在本文中,我们将看到如何为 SQLAlchemy ORM 查询创建会话。
在开始之前,让我们使用 pip 安装所需的依赖项:
pip install sqlalchemy
由于我们将在这篇文章中使用 MySQL,因此我们还将在Python中为 MySQL 安装 SQL 连接器。但是,除了 SQL 连接器之外,没有任何代码实现会随着数据库的变化而变化。
pip install pymysql
SQLAlchemy ORM 中的会话
Session 建立与数据库的所有对话。会议 是一个可以直接实例化的常规Python类。但是,为了标准化会话的配置和获取方式, sessionmaker类通常用于创建顶级会话配置,然后可以在整个应用程序中使用该配置,而无需重复配置参数。
Syntax: sqlalchemy.orm.session.sessionmaker(bind=None, **kwargs)
Parameters:
- bind: sqlalchemy.engine.Engine object specifying the database to perform conversations with.
示例 1:创建已配置的会话类
Python
import sqlalchemy as db
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
# DEFINE THE ENGINE (CONNECTION OBJECT)
engine = db.create_engine("mysql+pymysql://root:password@\
localhost/Geeks4Geeks")
# CREATE THE TABLE MODEL TO USE IT FOR QUERYING
class Students(Base):
__tablename__ = 'students'
first_name = db.Column(db.String(50),
primary_key=True)
last_name = db.Column(db.String(50),
primary_key=True)
course = db.Column(db.String(50))
score = db.Column(db.Float)
# CREATE THE SESSION OBJECT
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()
# TESTING OUR SESSION OBJECT
result = session.query(Students).all()
for r in result:
print(r.first_name, r.last_name)
Python
import sqlalchemy as db
# DEFINE THE ENGINE (CONNECTION OBJECT)
engine = db.create_engine("mysql+pymysql:/\
/root:password@localhost/Geeks4Geeks")
# CREATE THE SESSION OBJECT
from sqlalchemy.orm import sessionmaker
Session = sessionmaker()
# session is configured later
Session.configure(bind=engine)
session = Session()
Python
import sqlalchemy as db
from sqlalchemy.orm import sessionmaker
# DEFINE THE ENGINE FOR DATABASE 1
engine_1 = db.create_engine("mysql+pymysql://\
root:password@localhost/Geeks4Geeks")
# DEFINE THE ENGINE FOR DATABASE 2
engine_2 = db.create_engine("mysql+pymysql://\
root:password@localhost/Geeks4Geeks2")
# CREATING A CONFIGURED SESSION
# CLASS FOR DATABASE 1
Session_1 = sessionmaker(bind=engine_1)
session_1 = Session_1()
# CREATING A SESSION CLASS FOR DATABASE
# 2 AND CONFIGURING IT LATER
Session_2 = sessionmaker()
Session_2.configure(bind=engine_2)
session_2 = Session_2()
输出:
对于所有示例,我们创建一个强制引擎对象,以便我们可以将引擎与会话绑定。在此示例中,我们创建了一个已配置的会话对象。引擎是在会话创建者调用时定义的。但是,根据我们的要求,我们还有其他方法可以做到这一点。该代码为学生使用了一个演示表,该表有 4 个字段和 6 个记录,如代码和输出所示。
示例 2:向现有 sessionmaker() 添加配置
Python
import sqlalchemy as db
# DEFINE THE ENGINE (CONNECTION OBJECT)
engine = db.create_engine("mysql+pymysql:/\
/root:password@localhost/Geeks4Geeks")
# CREATE THE SESSION OBJECT
from sqlalchemy.orm import sessionmaker
Session = sessionmaker()
# session is configured later
Session.configure(bind=engine)
session = Session()
在示例 2 中,会话创建者创建了一个会话对象。正如我们在程序中看到的,这个会话对象是稍后配置的。当我们想要使用多个数据库实例或者引擎对象在程序的后期定义时,这种配置方法非常有用。
示例 3:在 SQLAlchemy 中使用多个会话
Python
import sqlalchemy as db
from sqlalchemy.orm import sessionmaker
# DEFINE THE ENGINE FOR DATABASE 1
engine_1 = db.create_engine("mysql+pymysql://\
root:password@localhost/Geeks4Geeks")
# DEFINE THE ENGINE FOR DATABASE 2
engine_2 = db.create_engine("mysql+pymysql://\
root:password@localhost/Geeks4Geeks2")
# CREATING A CONFIGURED SESSION
# CLASS FOR DATABASE 1
Session_1 = sessionmaker(bind=engine_1)
session_1 = Session_1()
# CREATING A SESSION CLASS FOR DATABASE
# 2 AND CONFIGURING IT LATER
Session_2 = sessionmaker()
Session_2.configure(bind=engine_2)
session_2 = Session_2()
在第三个示例中,我们使用sessionmaker()方法创建了 2 个不同的会话。这两个会话都指向不同的数据库连接。在主从连接或多数据库架构等用例中,这将被证明非常有用。