したがって、これらの2つのテーブル間の単純な一対多関係を実装しようとしています。私はドキュメントを読んで、ネットをこすり、これを解決するために多くの作業を入れて、私はあなたに目を向ける。プライマリキーを使用しない1対多数の関係を持つテーブルの作成
私はデータベースへの完全なアクセス権を持ち、仕事をする類似の関係で他のテーブルを作成することができます。
私はmariadb "mysql"を使用しています。
テーブル内の各行Tradableにはtick_size_idがあり、すべての行にはtick_size_idがあります。そして、私はその列にそれらを接続したい、私はどのように把握することはできません。
base = declarative_base()
class Tradables(base):
__tablename__ = "tradables"
id = Column(Integer, primary_key=True)
tick_size_id = Column(Integer, nullable=False)
ticks = relationship("Ticks")
class Ticks(base):
__tablename__ = "ticks"
id = Column(Integer, primary_key=True)
tick_size_id = Column(Integer, ForeignKey("tradables.tick_size_id"))
def main():
engine = create_engine("mysql+pymysql://user:[email protected]/database?host=localhost?port=3306")
base.metadata.create_all(engine)
if __name__ == '__main__':
main()
これは動作しません。
として失敗します。
sqlalchemy.exc.InternalError:。(pymysql.err.InternalError)(1005、tはテーブルTrading
を作成\ 'に' ticks
は(errnoに:150は "外部キー制約が正しく形成されています。" ) ')[SQL:' \ n
CREATE TABLE ticks (\n\t
id INTEGER NOT NULL AUTO_INCREMENT, \n\t
tick_size_id INTEGER, \n\t
PRIMARY KEY (id), \n\t
FOREIGN KEY(tick_size_id) REFERENCES tradables (tick_size_id)\n)\n\n']
私は間違っていますか?
編集:
は、これらの両方の作成の注文を試してみましたが、同じ結果を与えるの両方。
base.metadata.tables["ticks"].create(bind=engine)
base.metadata.tables["tradables"].create(bind=engine)
と
base.metadata.tables["tradables"].create(bind=engine)
base.metadata.tables["ticks"].create(bind=engine)
他の順序でテーブルを作成する。 –