[PYTHON] Ein Hinweis, dem ich beim Erstellen einer Tabelle mit SQL Alchemy verfallen war

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.

Tabellendefinition

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.

Erstellen einer Tabelle (grundlegend)

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.

Tabelle neu erstellen

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)

Ich möchte eine Tabelle angeben und erstellen

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 serialisieren

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

Ein Hinweis, dem ich beim Erstellen einer Tabelle mit SQL Alchemy verfallen war
Ein Hinweis, dem ich beim Ausführen von Python mit Visual Studio Code verfallen war
Ein Hinweis, von dem ich süchtig war, als ich unter Linux einen Piepton machte
Ich war süchtig danach, eine Python-Venv-Umgebung mit VS Code zu erstellen
Ich war süchtig danach, Cython mit PyCharm auszuprobieren, also machen Sie sich eine Notiz
Eine Geschichte, der ich nach der SFTP-Kommunikation mit Python verfallen war
Wovon ich süchtig war, als ich Klassenvererbung und gemeinsame Tabellenvererbung in SQLAlchemy kombinierte
Wovon ich süchtig war, als ich mit riesigen Dateien in einer Linux 32-Bit-Umgebung umging
Eine Geschichte, die ich süchtig danach war, eine Video-URL mit Tweepy zu bekommen
Ich erhalte einen UnicodeDecodeError, wenn ich versuche, mit Python sqlalchemy eine Verbindung zu Oracle herzustellen
[Go language] Seien Sie vorsichtig, wenn Sie einen Server mit mux + cors + alice erstellen. Besonders darüber, wovon ich in Bezug auf CORS süchtig war.
[Python] Als ich versuchte, ein Dekomprimierungswerkzeug mit einer Zip-Datei zu erstellen, die ich gerade kannte, war ich süchtig nach sys.exit ()
Drei Dinge, von denen ich süchtig war, als ich Python und MySQL mit Docker verwendete
Ich war süchtig danach, 2020 mit Selen (+ Python) zu kratzen
Eine Geschichte, von der ich bei np.where süchtig war
Wovon ich süchtig war, als ich Python Tornado benutzte
Beachten Sie, dass ich süchtig danach war, TensowFlow einzurichten
[IOS] GIF-Animation mit Pythonista3. Ich war süchtig danach.
Wovon ich süchtig war, als der Processing-Benutzer zu Python wechselte
Ich war süchtig nach Multiprocessing + Psycopg2
Als ich versuchte, PIL und matplotlib in einer virtuellen Umgebung zu installieren, war ich süchtig danach.
Eine Geschichte, nach der ich süchtig war, als ich in Go nil als Funktionsargument angab
Eine Geschichte, die ich süchtig danach war, Lambda von AWS Lambda anzurufen.
Ein Memorandum beim automatischen Erwerb mit Selen
Wovon ich süchtig war, als ich ALE in Vim für Python einführte
Beim Erstellen von .gitignore mit gibo musste ich keine .python-Version schreiben.
Was ich mit json.dumps in Pythons base64-Codierung süchtig gemacht habe
Beachten Sie, dass ich süchtig nach der fehlenden Wertinterpolation von sklearn war (Imputer)
Ich war süchtig danach, mysqlclient zu installieren
Was ich süchtig nach Python Autorun war
Als ich Django in mein Home-Verzeichnis legte, wurde ich mit einem Berechtigungsfehler in eine statische Datei eingebunden
Ich war süchtig danach, Tensorflow auf einer GPU mit dem NVIDIA-Treiber 440 + CUDA 10.2 auszuführen
Eine Geschichte, die mich süchtig nach dem Versuch machte, LightFM unter Amazon Linux zu installieren
Verwenden Sie Python aus Java mit Jython. Ich war auch süchtig danach.
[Fabric] Ich war süchtig danach, Boolesche Werte als Argument zu verwenden. Notieren Sie sich also die Gegenmaßnahmen.
[Einführung in json] Nein, ich war süchtig danach. .. .. ♬
Ich möchte ein Spiel mit Python machen
Ich erhalte einen UnicodeDecodeError, wenn ich mit mod_wsgi laufe
Python Hinweis: Wenn Sie einer Zeichenfolge einen Wert zuweisen
Ein Memo beim Erstellen einer Python-Umgebung mit Miniconda
Ich möchte mit Python in eine Datei schreiben
Es ist bequemer, csv-table zu verwenden, wenn Sie eine Tabelle mit Python-Sphinx schreiben
Als ich versuchte, eine VPC mit AWS CDK zu erstellen, konnte ich es aber nicht schaffen
Als ich versuchte, mit Python eine virtuelle Umgebung zu erstellen, funktionierte dies nicht
Als ich mit VScode eine Verbindung zu einem entfernten Jupyter-Server herstellte, war dieser entfernt, aber lokal.
Als ich in IPython versuchte, den Wert zu sehen, war es ein Generator, also kam ich auf ihn, als ich frustriert war.
Ich war nüchtern süchtig danach, awscli von einem in crontab registrierten Python 2.7-Skript aus aufzurufen
Beachten Sie, dass ich süchtig nach dem npm-Skript war, das in der Überprüfungsumgebung nicht übergeben wurde
[Python] Ich möchte nur den Index verwenden, wenn ich eine Liste mit einer for-Anweisung schleife
Ich möchte mit einem Knopf am Kolben übergehen
Vorsichtsmaßnahmen bei der Durchführung einer logistischen Regression mit Statsmodels
Ich möchte mit verstärkendem Lernen einen Berg besteigen
So konvertieren Sie ein Klassenobjekt mit SQLAlchemy in ein Wörterbuch
Als ich versuchte, eine Socket-Kommunikation mit Raspberry Pi durchzuführen, war das Protokoll anders
Probleme beim Erstellen eines CSV-JSON-Konvertierungstools mit Python
Ich blieb stecken, als ich versuchte, einen relativen Pfad mit relative_to () in Python anzugeben
Beachten Sie beim Initialisieren einer Liste in Python