Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQL Alchemy Flask中的手动对象关系映射_Python_Sqlalchemy - Fatal编程技术网

Python SQL Alchemy Flask中的手动对象关系映射

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

我正试图遵循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_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))