【发布时间】:2020-09-23 03:35:48
【问题描述】:
我的烧瓶应用程序用户和员工中有两个模型。
用户类别:
from flask_login import UserMixin
from . import db
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True) # primary keys are required in SQLAlchemy
email = db.Column(db.String(100), unique=True)
password = db.Column(db.String(100), nullable=False)
name = db.Column(db.String(1000), nullable=False)
user_type = db.Column(db.Enum("Candidate", "Employee", name="user_type"))
def get_id(self):
return self.id
员工等级:
from . import db
from .model_user import User
class Employee(db.Model):
employee_id = db.Column(db.Integer, primary_key=True)
employee_title = db.Column(db.String(100), nullable=False)
employee_permissions = db.Column(db.String(10000), nullable=True)
user_id = Column('user_id', Integer, ForeignKey("user.id"))
user = relationship("User", backref=backref("user", uselist=False))
def get_id(self):
return self.employee_id
我尝试过使用
db.create_all(app=create_app())
其中 db = SQLAlchemy() 和 create_app() 函数返回烧瓶应用程序
我收到以下错误
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\schema.py", line 926, in create
bind._run_visitor(ddl.SchemaGenerator, self, checkfirst=checkfirst)
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\engine\base.py", line 2104, in _run_visitor
conn._run_visitor(visitorcallable, element, **kwargs)
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\engine\base.py", line 1663, in _run_visitor
visitorcallable(self.dialect, self, **kwargs).traverse_single(element)
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\visitors.py", line 144, in traverse_single
return meth(obj, **kw)
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\ddl.py", line 827, in visit_table
self.connection.execute(
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\engine\base.py", line 1020, in execute
return meth(self, multiparams, params)
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\ddl.py", line 72, in _execute_on_connection
return connection._execute_ddl(self, multiparams, params)
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\engine\base.py", line 1071, in _execute_ddl
compiled = ddl.compile(
File "<string>", line 1, in <lambda>
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\elements.py", line 476, in compile
return self._compiler(dialect, bind=bind, **kw)
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\ddl.py", line 29, in _compiler
return dialect.ddl_compiler(dialect, self, **kw)
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\compiler.py", line 319, in __init__
self.string = self.process(self.statement, **compile_kwargs)
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\compiler.py", line 350, in process
return obj._compiler_dispatch(self, **kwargs)
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\visitors.py", line 95, in _compiler_dispatch
return meth(self, **kw)
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\compiler.py", line 2914, in visit_create_table
const = self.create_table_constraints(
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\compiler.py", line 2963, in create_table_constraints
return ", \n\t".join(
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\compiler.py", line 2963, in <genexpr>
return ", \n\t".join(
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\compiler.py", line 2966, in <genexpr>
self.process(constraint)
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\compiler.py", line 350, in process
return obj._compiler_dispatch(self, **kwargs)
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\visitors.py", line 95, in _compiler_dispatch
return meth(self, **kw)
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\compiler.py", line 3214, in visit_foreign_key_constraint
remote_table = list(constraint.elements)[0].column.table
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\util\langhelpers.py", line 883, in __get__
obj.__dict__[self.__name__] = result = self.fget(obj)
File "C:\Users\krish\AppData\Local\Programs\Python\Python38\lib\site-packages\sqlalchemy\sql\schema.py", line 2125, in column
raise exc.NoReferencedTableError(
sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'employee.user_id' could not find table 'User' with which to generate a foreign key to target column 'id'
我显然有用户表和 id 列。我什至尝试过在数据库中手动创建用户表,但我仍然遇到同样的错误。不知道我哪里出错了。我也尝试过 SO 上提供的解决方案
One-to-one relationship in Flask
https://docs.sqlalchemy.org/en/13/orm/basic_relationships.html#one-to-one
但仍然无法解决此错误。
【问题讨论】:
-
你这里有
ForeignKey("user.id"),但错误看起来你真的有ForeignKey("User.id")。 -
@IljaEverilä 我已经尝试过 User.id 和 user.id... 仍然遇到同样的错误
标签: python flask sqlalchemy foreign-keys flask-sqlalchemy