Flask 炼金术+;创建多对多关系失败
我有以下应用程序结构:Flask 炼金术+;创建多对多关系失败,flask,flask-sqlalchemy,Flask,Flask Sqlalchemy,我有以下应用程序结构: run.py |->app |->models |-> user.py (declares role-to-user relationship table and User model) |-> role.py (declares Role model) |-> main.py (contains initialization and all required imports) |-> exte
run.py
|->app
|->models
|-> user.py (declares role-to-user relationship table and User model)
|-> role.py (declares Role model)
|-> main.py (contains initialization and all required imports)
|-> extensions (here sqlalchemy variable declared to be imported later)
当我尝试按以下方式创建初始DB结构时:
from app.models import *
from app.extensions import db
from app.main import myapp #app is initialized with all packages like assets, db, security, etc.
with myapp.test_request_context():
db.create_all()
@app.before_first_request
def initialize_database():
db.create_all()
我有一个例外:
NOREFERENCEDTABLERROR:与列“users\u to\u roles.user\u id”关联的外键找不到表“users”,无法使用该表生成指向目标列“id”的外键
我也试着用以下方式来道指:
from app.models import *
from app.extensions import db
from app.main import myapp #app is initialized with all packages like assets, db, security, etc.
with myapp.test_request_context():
db.create_all()
@app.before_first_request
def initialize_database():
db.create_all()
无功而返
我试图将角色
移动到同一个文件中,其中用户
模型的声明结果相同。我在这里读了文档:但是它说‘您只需要导入db
’,它不起作用
下面是如何声明用户
模型和关系表(角色模型看起来类似于用户
):
如何使用Flask SQLAlchemy创建初始DB结构?Flask SQLAlchemy的一个功能是,当没有为模型类定义
\uuuuu tablename\uuuuu
类属性时,从类名自动生成表名。发件人:
SQLAlchemy中需要的某些部分在中是可选的
炼金术。例如,表名会自动设置为
除非被推翻,否则您将被拒绝。它是从转换为的类名派生的
小写,并将“CamelCase”转换为“camel_case”
在您的情况下,User
类将其\uuuuu tablename\uuuu
属性推断为User
,这意味着没有定义users
表
您可以通过显式设置\uuuu tablename\uuu
或更改ForeignKey
参数以匹配自动生成的表名来解决此问题:
类用户(db.Model,UserMixin):
__tablename_uu='users'
...
类角色(db.Model):
__tablename_uu='角色'
...
或者保留未定义的\uuuu tablename\uuuu
属性,并修改关联表:
users\u to\u roles\u association\u table=db.table('users\u to\u roles',
db.Column('user\u id',db.Integer,db.ForeignKey('user.id')),
db.Column('role\u id',db.Integer,db.ForeignKey('role.id'))
我试图通过显式设置table name来覆盖tablename,但它仍然遵循默认的单数名称。@KevinQ您是否可以共享演示此问题的示例代码?