# -*- encoding: utf-8 -*- ''' @File : models.py @License : (C)Copyright 2018-2022 @Modify Time @Author @Version @Desciption ------------ ------- -------- ----------- 2023/4/17 16:01 zart20 1.0 None ''' from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session, sessionmaker from sqlalchemy.ext.declarative import declarative_base # create_engine函数用于创建一个数据库引擎 (engine) 对象,该对象用于与底层数据库进行通信。 engine = create_engine('mysql+pymysql://root:123123@127.0.0.1/example') # scoped_session 函数用于封装会话工厂,使其能够被多个线程共享。 # 使用 scoped_session 可以保证每个线程都能使用同一个会话对象,从而避免了多个线程之间的会话冲突问题。 db_session = scoped_session( # sessionmaker 函数中指定会话的参数,包括禁用自动提交 (autocommit=False) 和自动flush (autoflush=False)。 # 这样可以在需要时手动控制 SQL 的提交和刷新机制。bind 参数指定了这个会话将要连接的数据库引擎对象。 sessionmaker( autoflush=False, autocommit=False, bind=engine)) Base = declarative_base() # `declarative_base` 是在 SQLAlchemy 中用于实现映射类 (ORM 类) 与表的映射关系的基类。 Base.query = db_session.query_property() # 将会话工厂的 query 方法设置成了 Base 的属性 query,这样在定义映射类时可以直接使用 Base.query 来查询数据库。 def init_db(): # 创建了所有继承自 Base 的 ORM 类所映射的表,如果表已经存在,则跳过。 # 这个函数将会自动找到所有继承自 Base 的 ORM 类,并生成对应的数据表。 # 其中 bind=engine 表示使用上面定义的数据库引擎来执行 SQL 语句,实现将 ORM 类中的属性映射为数据表中的列及其属性。 Base.metadata.create_all(bind=engine)