8

SQLAlchemyで一般的に次のエラーが発生するのはいつですか?

sqlalchemy.exc.OperationalError: (OperationalError) (1050, "Table 'foobar' already exists")

foobarテーブルはすでに存在しますが、SQLAlchemyがすでに存在するときにテーブルを作成しようとしているのはなぜですか。すでに存在する場合、テーブルを作成するべきではないと思います。

次の構文を使用してテーブルを作成しています。

t = Table('foobar', metadata,
      Column('col1', String(50), primary_key=True),
      Column('col2', String(100)),
      mysql_engine='InnoDB',
      mysql_charset='utf8')

(同じプログラムを10回並行して呼び出しています)

4

4 に答える 4

3

foob​​ar テーブルが既に存在する場合は、代わりに次のようにすることもできます。

users = Table('foobar', metadata, autoload=True)

そして、SQLAlchemy はデータベースからテーブルの構造を自動的に把握します。

最初に autoload を使用して、テーブルが存在するかどうかを確認し、存在しない場合はテーブルを作成します。

于 2012-08-10T11:23:53.077 に答える
1

これがいくつかのトラブルシューティングのアイデアに関する私の推測です。私の推測では、クライアントはテーブルが表示されないためにテーブルが存在しないと考えていますが、テーブルを作成しようとすると、実際に存在するためにテーブルが存在しないと考えています。

トラブルシューティングのアイデア:

  • コードの他の部分が同じログファイルなどに書き込んでいて、これらのテーブルを作成しようとしていないかどうかを確認してください。
  • クライアントと同じIDとパスワードを使用して手動でログインし、表が表示されるかどうかを確認します。
  • に渡しecho=Truecreate_engine、クライアントが実行する正確なクエリを学習し、独自のSQLシェルですべてのクエリを繰り返して、クライアントが何を見ているかを確認します。うまくいけば、それはあなたを結論に導くでしょう。
于 2012-08-10T15:01:03.250 に答える