ホームページ  >  に質問  >  本文

MySQL で SQLAlchemy を自動インクリメントできない

私は MySQL 8.0 と SQLAlchemy を使用しています。 ID 列が増えませんが、その理由がわかりません。

SQLAlchemy モデル:

リーリー

クラックコード:

リーリー

私が受け取った最初のエラーは次のとおりです:

リーリー

この回答に基づいて、id 列にインデックス パラメーターを追加し、my.ini ファイルを編集して STRICT_TRANS_TABLES モードを終了しました。新しいエラーは次のとおりです:

リーリー

このトピックで見つけたすべての回答は AUTO_INCRMENT を参照していますが、SQLAlchemy ドキュメントには、これが整数の主キーであり false として指定されていないため、ここではこれがデフォルトであるべきであると記載されています。念のため autoincrement=True を追加してみましたが、移行しようとすると、alembic から変更が検出されなかったことが通知されます。

P粉899950720P粉899950720211日前267

全員に返信(1)返信します

  • P粉621033928

    P粉6210339282024-03-22 13:25:49

    コメントから質問まで:

    いいえ、まさにこれが仕組みです。具体的には、次のようなモデルの場合です。 リーリー

    alembic リビジョン --autogenerate を生成します リーリー

    (明示的に

    autoincrement= を指定せずに) ただし、alembic アップグレード ヘッド が SQLAlchemy に実際にテーブルを作成させるとき、SQLAlchemy によって発行される リーリー ###いいえ。上に示したように、Alembic はテーブルが最初に作成されるときに

    AUTO_INCRMENT

    を正しく処理します。検出されないのは、既存のテーブルを持つ ORM モデルの列が autoincrement=False から autoincrement=True (またはその逆) に変更されたことです。 コミット メッセージ

    ここ

    : に示されているように、これは既知の動作です。 "バックエンド間で移植できないため、このフラグ は列の「自動インクリメント」ステータスの変更をサポートしていないことに注意してください。"

    MySQL は ALTER_TABLE によるカラムの AUTO_INCRMENT 属性の変更をサポートしているため、「空」の upgrade

    メソッドを変更することで変更できます。 リーリー ###に### リーリー ###レンダリング### リーリー

    返事
    0
  • キャンセル返事