現在、FastAPIを用いて簡単な掲示板を作成しています。
DBにはsqlite3を用いておりスレッドの登録を行おうとしたのですが、sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: threads.id
というエラーが発生して登録が行えません。
テーブルは以下のようになっています。
class Thread(Base): __tablename__ = "threads" id = Column(Integer, primary_key=True, nullable=False, autoincrement=True) name = Column(String(255), nullable=False) created_at = Column(DateTime, nullable=False, default=datetime.utcnow) messages = relationship('Message', back_populates="thread", cascade='all, delete-orphan')
エラー文にあるようにidがユニークである必要があるのですが、なぜautoincrement=True
の記述があるにもかかわらず自動的にidが付与されないのかがわかりません。
実際にデータベースに接続してスキーマを確認したところautoincrementが入っていなかったため、autoincrement=True
の記述が誤っているのだろうとは思うのですがどのように修正を行えば良いのかが分からずにいます。
Threadsテーブルスキーマ
CREATE TABLE threads ( id INTEGER NOT NULL, name VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL, PRIMARY KEY (id) );
SQLiteのAuto Incrementについてドキュメントを確認したところ"Table構文にsqlite_autoincrement=Trueというフラグを追加します。"という文章と共に以下のコードが記述されているのですが、そもそも上記の自分が書いたテーブル設定のコードの書き方自体が間違っているのでしょうか?
わかる方いましたら、教えていただきたいです。
Table('sometable', metadata, Column('id', Integer, primary_key=True), sqlite_autoincrement=True)
よろしくお願いいたします。
あなたの回答
tips
プレビュー