J'ai pensé à créer une table avec SQLAlchemy, mais j'y étais plus accro que prévu, alors j'ai pris une note.
La table est définie par une classe qui hérite de Base. (Il semble y avoir plusieurs méthodes, mais unifiées à cela)
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))
Exécutez declarative_base pour créer une classe de base. La définition de classe hérite de cela.
Il est possible de déterminer le nom de la table avec «tablename». Des éléments semblables à des rails tels que «nom de classe unique et noms de table multiples» sont également possibles.
Les tables sont essentiellement créées dans un lot avec metadata.create_all
engine = create_engine("mysql+pymysql://<user>:<pass>@<host>/<dbname>?charset=utf8")
Base.metadata.create_all(bind=engine)
Passez le moteur de base de données à metadata.create_all
de la classe de base créée ci-dessus.
Par conséquent, les tables qui héritent de Base sont collectivement CREATE TABLE.
Pour plus de détails sur la création d'un moteur, reportez-vous au Document officiel. Séparément, un client de base de données comme PyMySQL est requis.
Une fois que create_all est exécuté, il ne sera pas exécuté la deuxième fois ou plus tard. Par conséquent, même si la table est supprimée par SQL etc. puis exécutée à nouveau, la table ne peut pas être créée.
Dans ce cas, définissez checkfirst = False
comme argument.
Base.metadata.create_all(bind=engine, checkfirst=False)
create_all crée une table en une seule fois, mais parfois elle est créée en spécifiant une table.
Dans ce cas, cela est possible en passant des informations de table à l'argument tables.
Les informations de table se trouvent dans la propriété __table__
de la classe de définition de table.
Base.metadata.create_all(bind=engine, tables=[User.__table__])
Le point à faire attention est de passer la table sous forme de tableau et la propriété __table__
.
Spécifier une table dans create_all ne semble pas être un nom ... mais cela ne peut pas être aidé.
Je ne veux pas utiliser primary_key comme numéro de série lorsque je veux apporter des données d'une base de données à un autre endroit et créer un désordre.
Si vous ne voulez pas que la clé primaire soit un numéro de série, spécifiez ʻautoincrement avec
False`.
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