SQLAlchemyで主キーなしでテーブルを作成することは可能ですか?私が定義したい関係は次のとおりです。
class TPost(Base):
__tablename__ = "forum_post"
id = Column(Integer, primary_key = True)
topic_id = Column(Integer, ForeignKey("forum_topic.id"))
index = Column(Integer)
page = Column(Integer)
user_id = Column(Integer, ForeignKey("forum_user.id"))
posted_at = Column(DateTime)
post_text = Column(String)
has_quotes = Column(Boolean)
quotes = relationship("TQuote")
class TQuote(Base):
__tablename__ = "forum_quotes"
id = Column(Integer, ForeignKey("forum_post.id"))
is_direct = Column(Boolean)
quoted_text = Column(String)
quoted_id = Column(Integer)
ご覧のとおり、主キーは実際には必要ありませんQuote
。将来、関係を拡張するつもりはありません。
私の問題は具体的にはこのエラーメッセージで表されます:
sqlalchemy.exc.ArgumentError: Mapper Mapper|TQuote|forum_quotes
could not assemble any primary key columns for mapped table 'forum_quotes'
編集:
ペア(id,quoted_id)
は一意であり、データの大部分に存在しますが、引用が直接ではない場合(およびその場合はquoted_idがない場合)、引用されたテキストを引用関係に直接インライン化します。デュアルテーブルアプローチ(誤った引用符に主キーを持つテーブルがある場合)を使用することもできますが、実際には、これを単一の1対多の関係として実装したいと思います。1回以上参加する必要はありません。
編集2:
引用符に番号を付け、外部キー+アプリで生成された番号をpkeyとして使用しますが、それでも面倒です。次に、構文を理解します。
編集3:
編集2で概説されているように、問題を解決しました。データを高レベルでモデル化する場合でも、関係を実装するために必要なすべての情報がSQL Alchemyにあるため、SQLalchemyにかなり悩まされます。Sql Alchemyが主キーを必要とする理由を理解しています(ormの実装が容易になります)。
なぜSQLAlchemyを使用しているのか疑問に思い始めています。それがなければ、psycopg2を使用して一方向のUPSERTまたはCREATE_IF_NOT_EXIST非同期操作を実装できます。ORMは本当に追いつく必要があります。