[PYTHON] Une note à laquelle j'étais accro lors de la création d'une table avec SQL Alchemy

J'ai pensé à créer une table avec SQLAlchemy, mais j'y étais plus accro que prévu, alors j'ai pris une note.

définition de table

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.

Créer une table (basique)

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.

Recréer la table

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)

Je souhaite spécifier une table et la créer

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 sérialiser primary_key

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

Une note à laquelle j'étais accro lors de la création d'une table avec SQL Alchemy
Une note à laquelle j'étais accro lors de l'exécution de Python avec Visual Studio Code
Une note à laquelle j'étais accro lors de l'émission d'un bip sous Linux
J'étais accro à la création d'un environnement Python venv avec VS Code
J'étais accro à essayer Cython avec PyCharm, alors prenez note
Une histoire à laquelle j'étais accro après la communication SFTP avec python
Ce à quoi j'étais accro en combinant l'héritage de classe et l'héritage de table commune dans SQLAlchemy
Ce à quoi j'étais accro en traitant d'énormes fichiers dans un environnement Linux 32 bits
Une histoire à laquelle j'étais accro à essayer d'obtenir une URL de vidéo avec tweepy
J'obtiens un UnicodeDecodeError en essayant de me connecter à oracle avec python sqlalchemy
[Go language] Soyez prudent lors de la création d'un serveur avec mux + cors + alice. Surtout à propos de ce à quoi j'étais accro autour de CORS.
[Python] Quand j'ai essayé de créer un outil de décompression avec un fichier zip que je connaissais juste, j'étais accro à sys.exit ()
Trois choses auxquelles j'étais accro lors de l'utilisation de Python et MySQL avec Docker
J'étais accro au grattage avec Selenium (+ Python) en 2020
Une histoire à laquelle j'étais accro chez np.where
Ce à quoi j'étais accro lors de l'utilisation de Python tornado
Notez que j'étais accro à la configuration de TensowFlow
[IOS] Animation GIF avec Pythonista3. J'en étais accro.
Ce à quoi j'étais accro lorsque l'utilisateur de traitement est passé à Python
J'étais accro au multitraitement + psycopg2
Quand j'ai essayé d'installer PIL et matplotlib dans un environnement virtualenv, j'en étais accro.
Une histoire à laquelle j'étais accro en spécifiant nil comme argument de fonction dans Go
Une histoire à laquelle j'étais accro à appeler Lambda depuis AWS Lambda.
Un mémorandum lors de l'acquisition automatique avec du sélénium
Ce à quoi j'étais accro en présentant ALE à Vim pour Python
Lors de la création de .gitignore avec gibo, je n'ai pas eu à écrire .python-version.
Ce à quoi j'étais accro avec json.dumps dans l'encodage base64 de Python
Notez que j'étais accro à l'interpolation des valeurs manquantes de sklearn (Imputer)
J'étais accro à pip installer mysqlclient
Ce que j'étais accro à Python autorun
Lorsque j'ai mis Django dans mon répertoire personnel, je suis devenu accro à un fichier statique avec une erreur d'autorisation
J'étais accro à l'exécution de tensorflow sur GPU avec le pilote NVIDIA 440 + CUDA 10.2
Une histoire à laquelle j'étais accro à essayer d'installer LightFM sur Amazon Linux
Utilisez Python de Java avec Jython. J'étais aussi accro.
[Fabric] J'étais accro à l'utilisation de booléen comme argument, alors notez les contre-mesures.
[Introduction à json] Non, j'en étais accro. .. .. ♬
Je veux faire un jeu avec Python
J'obtiens une UnicodeDecodeError lors de l'exécution avec mod_wsgi
Remarque Python: lors de l'attribution d'une valeur à une chaîne
Un mémo lors de la création d'un environnement python avec miniconda
Je veux écrire dans un fichier avec Python
Il est plus pratique d'utiliser csv-table lors de l'écriture d'une table avec python-sphinx
Quand j'ai essayé de créer un VPC avec AWS CDK mais que je n'ai pas pu le faire
Quand j'ai essayé de créer un environnement virtuel avec Python, cela n'a pas fonctionné
Lorsque je me suis connecté à un serveur Jupyter distant avec VScode, il était distant mais local.
Dans IPython, quand j'ai essayé de voir la valeur, c'était un générateur, donc je l'ai inventé quand j'étais frustré.
J'étais sobrement accro à appeler awscli à partir d'un script Python 2.7 enregistré dans crontab
Notez que j'étais accro au script npm ne passant pas dans l'environnement de vérification
[Python] Je souhaite utiliser uniquement l'index lors de la mise en boucle d'une liste avec une instruction for
Je veux faire la transition avec un bouton sur le ballon
Précautions lors de l'exécution de la régression logistique avec Statsmodels
Je veux escalader une montagne avec l'apprentissage par renforcement
Comment convertir un objet de classe en dictionnaire avec SQLAlchemy
Quand j'ai essayé de faire une communication socket avec Raspberry Pi, le protocole était différent
Problèmes lors de la création d'un outil de conversion csv-json avec python
Je suis resté bloqué en essayant de spécifier un chemin relatif avec relative_to () en python
Choses à noter lors de l'initialisation d'une liste en Python