数据库中的查询操作是通过Query对象实现的,而Session提供了创建Query对象的接口。Query对象会返回一组同一映射(Identity Map)对象组成的集合。集合中的一个对象,对应于数据库表中的一行。
同一映射:每个对象有一个唯一的ID,如果两个对象的ID相同,则认为他们是相同的对象。
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://root:password@localhost:3306/test_1')
print(engine)
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
# 表的名称
__tablename__ = 'users'
# 列的名称及数据类型
id = Column(Integer, primary_key=True)
username = Column(String(64), nullable=False, index=True)
password = Column(String(64), nullable=False)
email = Column(String(64), nullable=False, index=True)
def __repr__(self):
return "<User(id='%s', fullname='%s', password='%s', email='%s')>" % (self.id, self.username, self.password, self.email)
Base.metadata.create_all(engine)
DBSession = sessionmaker(bind=engine)
session = DBSession()
这是说怕出现同一个session对象在不同的程序中同一时间被执行了不同的操作而导致问题吗?
from sqlalchemy.orm import scoped_session
from sqlalchemy.orm import sessionmaker
session_factory = sessionmaker(bind=some_engine)
Session = scoped_session(session_factory)
session = Session()
session1 = Session()
session2 = Session()