8

既存のデータベースのSQLAlchemyモデルを作成する場合、テーブルに関するどのくらいの情報を提供する必要がありますか?MySQLデータベースの一部である次のテーブルについて考えてみます。

CREATE TABLE entities (
    id INTEGER NOT NULL AUTO_INCREMENT,
    dn VARCHAR(100) NOT NULL UNIQUE,
    PRIMARY KEY (id)
) Engine=InnoDB, COLLATE utf8_unicode_ci;

私のテストに基づくと、これはそれを使用するのに十分でしょう:

class Entity(Base):
    __tablename__ = 'entities'
    id          = Column('id', Integer, primary_key=True)
    dn          = Column('dn', String(100))

ただし、もちろん、UNIQUE、AUTO_INCREMENT、Engine、およびCOLLATEの情報が欠落しています。SQLAlchemyはこれらを気にしますか?

もちろん、Reflectionを使用することもできますが、一貫性の理由から使用したくありません。

4

2 に答える 2

10

以下は意味的に同じ結果を生成するはずですが、同じクエリは生成されません。

class Entity(Base):
    __tablename__ = 'entities'
    __table_args__ = {'mysql_engine':'InnoDB'}
    id          = Column('id', Integer, primary_key=True)
    dn          = Column('dn', String(100, collation='utf8_unicode_ci'), unique=True)

テーブル全体の照合を指定する方法がわからないだけです。

于 2013-03-09T20:25:45.710 に答える
1
class Users(db.Model):
    __tablename__='users'
    __table_args__ = {'mysql_engine':'InnoDB', 'mysql_charset':'utf8','mysql_collate':'utf8_czech_ci'}
    id=db.Column('iduser', db.Integer, primary_key=True)
    name=db.Column('column_name', db.String(193))

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

    def __repr__(self):
        return self.name
于 2020-10-05T20:07:43.903 に答える