3

データベースのクエリだけでなく、テーブルの作成にも SQLAlchemy ORM を使用したいと考えています。したがって、データベースの空のスキーマに接続します。

engine = create_engine(connection_string)
Base = declarative_base()

次の例のようなクラスがいくつかあります。

class SomeClass(Base):
    __tablename__= 'SomeClass'
    id = Column(Integer, primary_key=True, auto_increment=True)
    name = Column(String(50))

    def __init__(self, name):
        self.name = name

私が呼び出すデータベースを作成するには:

Base.metadata.create_all(engine)

これはうまくいきます - 初めてです。データベースからテーブルを手動で削除するかBase.metadata.drop_all()、スクリプトを呼び出して再起動すると (したがって、create_all再度呼び出します)、テーブルが既に存在するというエラーが表示されます。

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

これは真実ではないとはっきり言えます。CLI ツールから CREATE TABLE を使用して同じ名前のテーブルを作成できます。またデータベースデーモン停止して再度起動すると、.create_all

これは、SQLAlchemy とデータベースの間の接続に関係していると思います。明らかに、SQLAlchemy は、削除した後もテーブルがまだ存在していると考えていますが、これは正しくありません。しかし、この存在しないテーブルをクエリしようとすると、テーブルが存在しないことがわかります。

グーグルで調べましたが、この動作の説明を見つけることができませんでした。私は SQLAlchemy をあまり頻繁に使用しないので、問題を理解するのに十分なほど詳しくないのかもしれません。

とにかく、ヒントをいただければ幸いです。

Python 2.7.3MySQL 5.1.47SQLAlchemy 0.8.0b2を使用しています

PS: Postgres を使用して、このような問題に悩まされたことはありません。

4

1 に答える 1

1

MySQL 5.1.66 にアップグレードして、この問題を修正しました。古いインスタンスをアップグレードしただけでなく、システムから完全にアンインストールし、新しいバージョンを最初からインストールしたことに注意してください。したがって、問題が古いインストールの構成ミスによるものなのか、単なるバグによるものなのか、まだわかりません。

ただし、今ではすべて正常に動作しています。

于 2013-01-28T11:41:22.903 に答える