Ich dachte darüber nach, eine Tabelle mit SQLAlchemy zu erstellen, aber ich war mehr davon abhängig als erwartet, also machte ich mir eine Notiz.
Die Tabelle wird von einer Klasse definiert, die Base erbt. (Es scheint mehrere Methoden zu geben, die jedoch einheitlich sind.)
from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
fullname = Column(String(255))
password = Column(String(255))
Führen Sie declative_base aus, um eine Basisklasse zu erstellen. Die Klassendefinition erbt dies.
Es ist möglich, den Tabellennamen mit __tabellenname__
zu bestimmen.
Schienenähnliche Dinge wie "Name einer einzelnen Klasse und mehrere Tabellennamen" sind ebenfalls möglich.
Tabellen werden grundsätzlich in einem Stapel mit "metadata.create_all" erstellt
engine = create_engine("mysql+pymysql://<user>:<pass>@<host>/<dbname>?charset=utf8")
Base.metadata.create_all(bind=engine)
Übergeben Sie das Datenbankmodul an "metadata.create_all" der oben erstellten Basisklasse. Infolgedessen sind die Tabellen, die Base erben, zusammen CREATE TABLE.
Einzelheiten zum Erstellen einer Engine finden Sie im Offiziellen Dokument. Separat ist ein Datenbankclient wie PyMySQL erforderlich.
Sobald create_all ausgeführt wurde, wird es nicht das zweite Mal oder später ausgeführt. Selbst wenn die Tabelle von SQL usw. gelöscht und dann erneut ausgeführt wird, kann die Tabelle daher nicht erstellt werden.
In diesem Fall setzen Sie "checkfirst = False" als Argument.
Base.metadata.create_all(bind=engine, checkfirst=False)
create_all erstellt eine Tabelle auf einmal, aber manchmal wird sie durch Angabe einer Tabelle erstellt.
In diesem Fall ist es möglich, die Tabelleninformationen an das Argument tables zu übergeben.
Tabelleninformationen befinden sich in der Eigenschaft __table__
der Tabellendefinitionsklasse.
Base.metadata.create_all(bind=engine, tables=[User.__table__])
Seien Sie vorsichtig, indem Sie die Tabelle als Array und die Eigenschaft __table__
übergeben.
Das Angeben einer Tabelle in create_all scheint kein Name zu sein ... aber es kann nicht geholfen werden.
Ich möchte primary_key nicht als Seriennummer verwenden, wenn ich Daten aus einer Datenbank an einen anderen Ort bringen und ein Chaos anrichten möchte.
Wenn Sie nicht möchten, dass der Primärschlüssel eine Seriennummer ist, geben Sie "Autoincrement" mit "False" an.
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True, autoincrement=False)
name = Column(String)
fullname = Column(String(255))
password = Column(String(255))
Recommended Posts