[英]Sqlalchemy Foreign key relationship error while creating tables
我使用 sqlalchemy 創建表,其中一些表有多個外鍵關系。下面是代碼。 我收到錯誤:
sqlalchemy.exc.NoForeignKeysError:找不到“項目”和“流派”之間的任何外鍵關系
嘗試運行腳本時。
任何人都可以向我解釋如何在 sqlalchemy 中創建表,如果表具有多個關系,則創建順序。
import sqlalchemy
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base
import datetime
from sqlalchemy import *
engine = sqlalchemy.create_engine('postgresql+psycopg2://postgres:newpassword@localhost:5432/test');
Session = sessionmaker(bind=engine)
session = Session()
metadata = MetaData(engine)
metadata.drop_all(engine)
Base = declarative_base(metadata=metadata)
class User(Base):
__tablename__ = 'users'
id = Column(Integer,primary_key = True)
email = Column(String(30),nullable = False)
password = Column(String(30),nullable = False)
class Genre(Base):
__tablename__ = 'genre'
id = Column(Integer,primary_key = True)
title = Column(String(30),nullable = False)
class Status(Base):
__tablename__ = 'status'
id = Column(Integer,primary_key = True)
status = Column(String(30),nullable = False)
class FilmType(Base):
__tablename__ = 'filmtype'
id = Column(Integer,primary_key = True)
filmtype = Column(String(30),nullable = False)
class Project(Base):
__tablename__ = 'project'
id = Column(Integer,primary_key = True)
name = Column(String(30),nullable = False)
poster = Column(Text, nullable = False)
genre_id = Column(Integer,ForeignKey('genre.id'))
genre_id = relationship('Genre',backref = 'genres')
owner = Column(Integer,ForeignKey('users.id'))
owner = relationship('Users',backref = 'users')
class Videos(Base):
__tablename__ = 'videos'
id = Column(Integer,primary_key = True)
dropbox_url = Column(Text)
film_type = Column(Integer,ForeignKey('filmtype.id'))
film_type = relationship('FilmType',backref = 'film_types')
video_status = Column(Integer,ForeignKey('status.id'))
video_status = relationship('Status',backref = 'video_statuses')
project_id = Column(Integer,ForeignKey('project.id'))
project_id = relationship('Project',backref = 'projetcs')
user_id = Column(Integer,ForeignKey('users.id'))
user_id = relationship('User', backref = 'video_owners')
metadata.create_all(bind = engine)
user_ = User(email='lala.com',password='lala')
genre_ = Genre(title='Horror')
status_ = Status(status='Active')
filmtype_ = FilmType(filmtype ='lala')
project_ = Project(name='lala',poster='mij.jpg')
videos_ = Videos(dropbox_url='drop/vi.com')
session.add(videos_)
session.flush()
session.commit()
錯誤
“sqlalchemy.exc.NoForeignKeysError:無法確定關系Project.genre_id的父/子表之間的連接條件> - 沒有鏈接這些表的外鍵。確保引用列與ForeignKey或ForeignKeyConstraint相關聯,或指定'primaryjoin ' 表達。”
您正在用關系對象覆蓋列規范,因此 SQLAlchemy 永遠不會看到這些列。 查看您的數據庫是否在表中沒有外鍵列,並將列或關系類變量重命名為具有唯一名稱。 也許是這樣的:
owner_id = Column(Integer,ForeignKey('users.id'))
owner = relationship('Users',backref = 'users')
就我而言,我寫了表格但忘記了列:
owner_id = Column(Integer, ForeignKey('users'))
代替
owner_id = Column(Integer, ForeignKey('users.id'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.