Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.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 烧瓶应用模型模块_Python_Flask_Flask Sqlalchemy - Fatal编程技术网

Python 烧瓶应用模型模块

Python 烧瓶应用模型模块,python,flask,flask-sqlalchemy,Python,Flask,Flask Sqlalchemy,我正在构建一个flask应用程序foo,到目前为止,这就是文件的组织方式 foo |-- app | |-- __init__.py | |-- models.py | |-- foo.py 在\uuuu init\uuuu.py中,我定义了一个函数来创建应用程序,然后从foo.py调用它。这就是\uuuu init\uuuuu.py的样子: from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() def create_ap

我正在构建一个flask应用程序
foo
,到目前为止,这就是文件的组织方式

foo
|-- app
|   |-- __init__.py
|   |-- models.py
|
|-- foo.py
\uuuu init\uuuu.py
中,我定义了一个函数来创建应用程序,然后从
foo.py
调用它。这就是
\uuuu init\uuuuu.py
的样子:

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

def create_app(config_name):
    app = Flask(__name__)
    ...
    db.init_app(app)  
模块
models.py
导入
db
并访问现有数据库。到目前为止,我一直在使用
db.engine.execute()
进行查询,但它似乎有点低效。例如,我有一个名为
var
的表,我经常在我的应用程序中访问它,因此我在
models.py

class Var(object):       
   def query ...
但是我想用炼金术来代替:

class Var(db.Model):
    ...
我试图按照答案构建我的应用程序,但这些是我迄今为止发现的问题

  • 如果我在
    create\u app
    函数中插入
    base.metadata.reflect(db.engine)
    ,我会收到一个错误,说我需要创建上下文,这没有多大意义,因为这是我创建上下文的地方。当然,如果我使用app.app\u context():base.metadata.reflect(db.engine)执行
    ,我可以四处走动,但是当我创建类
    Var
    时,问题仍然存在:

    类别变量(db.Model): =db.Model.metadata.tables['var']

  • 字典是空的,所以我得到了一个
    KeyError

  • 当我试图创建一个内部
    models
    来创建我的类
    Var
    时,它也失败了,因为它无法导入它

  • 我已经尝试了我找到的所有建议,但似乎都不管用。感谢您的帮助

    问题在于您使用的是
    Flask SQLAlchemy
    ,与大多数Flask扩展一样,它与Flask绑定,并且为了运行某些任务,它需要一个Flask上下文,但是为了反映已经存在的数据库,您需要一个独立于任何请求的引擎


    您可能仍然可以通过在任何需要的地方使用app.app_context()
    来使用
    db
    ,但最好不要使用
    Flask-SQLAlchemy
    ,而是直接使用
    SQLAlchemy
    并使用
    create\u-engine
    ,就像您链接的问题一样。

    问题在于您使用的是
    Flask SQLAlchemy
    ,与大多数Flask扩展一样,它与Flask绑定,并且为了运行某些任务,它需要一个Flask上下文,但为了反映已经存在的数据库,您需要一个独立于任何请求的引擎


    您可能仍然可以通过在任何需要的地方使用app.app_context()来使用
    db
    ,但最好不要使用
    Flask-SQLAlchemy
    ,而是直接使用
    SQLAlchemy
    并使用
    create\u-engine
    ,就像你链接的问题一样。

    你不需要在模型内部设置
    table
    db.model
    已经为你设置了表。@LuisOrduz我明白了,那么我如何将类
    Var
    链接到表
    Var
    ?类
    Var
    就是表。要创建它,只需将类导入到运行
    create_all
    方法的位置。这就是我得到的
    ArgumentError:Mapper Mapper | Var | Var无法为映射表“Var”组装任何主键列,我假设这意味着我需要定义表的结构(列、主键等等),这就是解决方案吗?您没有向表中添加主键<代码>类变量(db.Model):。。。id=db.Column(db.Integer,primary_key=True).
    您不需要在模型内部设置
    table
    db.model
    已经为您设置了表。@LuisOrduz我明白了,那么如何将类
    Var
    链接到表
    Var
    ?类
    Var
    就是表。要创建它,只需将类导入到运行
    create_all
    方法的位置。这就是我得到的
    ArgumentError:Mapper Mapper | Var | Var无法为映射表“Var”组装任何主键列,我假设这意味着我需要定义表的结构(列、主键等等),这就是解决方案吗?您没有向表中添加主键<代码>类变量(db.Model):。。。id=db.Column(db.Integer,主键=True).