📜  SQLAlchemy ORM – 创建会话

📅  最后修改于: 2022-05-13 01:55:48.923000             🧑  作者: Mango

SQLAlchemy ORM – 创建会话

在本文中,我们将看到如何为 SQLAlchemy ORM 查询创建会话。

在开始之前,让我们使用 pip 安装所需的依赖项:

pip install sqlalchemy

由于我们将在这篇文章中使用 MySQL,因此我们还将在Python中为 MySQL 安装 SQL 连接器。但是,除了 SQL 连接器之外,没有任何代码实现会随着数据库的变化而变化。

pip install pymysql

SQLAlchemy ORM 中的会话

Session 建立与数据库的所有对话。会议 是一个可以直接实例化的常规Python类。但是,为了标准化会话的配置和获取方式, sessionmaker类通常用于创建顶级会话配置,然后可以在整个应用程序中使用该配置,而无需重复配置参数。

示例 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()


输出:

示例 1 输出

对于所有示例,我们创建一个强制引擎对象,以便我们可以将引擎与会话绑定。在此示例中,我们创建了一个已配置的会话对象。引擎是在会话创建者调用时定义的。但是,根据我们的要求,我们还有其他方法可以做到这一点。该代码为学生使用了一个演示表,该表有 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 个不同的会话。这两个会话都指向不同的数据库连接。在主从连接或多数据库架构等用例中,这将被证明非常有用。