Python SQL Alchemy Flask中的手动对象关系映射
我正试图遵循SQLAlchemy中关于如何在我的应用程序(Flask web应用程序)中创建手动ORM的文档。我无法使其工作,因为1)它无法映射,2)我无法使Python SQL Alchemy Flask中的手动对象关系映射,python,sqlalchemy,Python,Sqlalchemy,我正试图遵循SQLAlchemy中关于如何在我的应用程序(Flask web应用程序)中创建手动ORM的文档。我无法使其工作,因为1)它无法映射,2)我无法使db\u会话.query\u属性()工作。在文档中,映射和模型放在一起,但在我的Flask应用程序中,它们位于单独的文件中。这就是我所拥有的: task.py(模型) orm.py from sqlalchemy.orm import mapper from ..data.database import metadata, db_sessi
db\u会话.query\u属性()工作。在文档中,映射和模型放在一起,但在我的Flask应用程序中,它们位于单独的文件中。这就是我所拥有的:
task.py(模型)
orm.py
from sqlalchemy.orm import mapper
from ..data.database import metadata, db_session
from ..domain.task import Task
tasks = Table(
'tasks', metadata,
Column('id', Integer, primary_key=True, autoincrement=True),
Column('name', String(255)),
Column('priority', Integer, nullable=False),
Column('deadline', Date, nullable=False)
mapper(Task, tasks)
database.py
from sqlalchemy import create_engine, MetaData
from sqlalchemy.orm import scoped_session, sessionmaker
def init_db():
metadata.create_all(bind=engine)
path_to_db = get_db_path()
engine = create_engine("sqlite-db-url", convert_unicode=True)
metadata = MetaData()
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
orm.py文件不会被解释器读取,当我尝试添加记录时,会得到一个
unappedInstanceError(“类”task.task“未映射”)
。当尝试查询时,我得到一个无实例错误。什么是实现这一目标的最佳方法?不确定项目在包和模块方面的结构。但是您可以将orm
模块导入包的\uuuu init\uuuu.py
文件中,因此从包中导入其他模块的任何操作都将强制导入orm
。
from sqlalchemy import create_engine, MetaData
from sqlalchemy.orm import scoped_session, sessionmaker
def init_db():
metadata.create_all(bind=engine)
path_to_db = get_db_path()
engine = create_engine("sqlite-db-url", convert_unicode=True)
metadata = MetaData()
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))