Implementierung von Add-, Delete-, Modification- und Query-Operationen in MySQL basierend auf sqlalchemy

Implementierung von Add-, Delete-, Modification- und Query-Operationen in MySQL basierend auf sqlalchemy

Bedarfsszenario:

Der Chef bat mich, den Crawler zu verwenden, um die Daten in die MySQL-Datenbank zu schreiben oder zu aktualisieren. Baidu fand zwei Methoden

1 besteht darin, pymysql zu verwenden, um eine Verbindung zu mysql herzustellen und Daten durch Ausführen nativer SQL-Anweisungen hinzuzufügen, zu löschen, zu ändern und abzufragen.

2 besteht darin, SQLAlchemy zu verwenden, um eine Verbindung zu MySQL herzustellen, Tabellen zu erstellen und Datenbanken über ORM-Modelle zu betreiben, ohne native SQL-Anweisungen zu schreiben, was relativ einfach ist.

Im Folgenden schildern wir meine Erfahrungen mit der Verwendung von sqlalchemy.

Implementierungsprozess: Verbindung zur Datenbank herstellen > Tabelle über die Modellklasse erstellen > Sitzung einrichten > Anweisung zum Erstellen der Tabelle ausführen > Hinzufügen, Löschen, Ändern und Abfragen über die Sitzung

from sqlalchemy import exists, Spalte, Ganzzahl, Zeichenfolge, Fremdschlüssel, existiert
von sqlalchemy.ext.declarative importiere declarative_base
von sqlalchemy importiere create_engine
aus sqlalchemy.orm importiere Sessionmaker

# Datenbank-Engine erstellt engine = create_engine("mysql+pymysql://user:pwd@ip/database name?charset=utf8")

#Sitzungstyp erstellen DBSession = sessionmaker(bind=engine)

# Instanziieren Sie das offizielle Modell – Base ist das ORM-Modell Base = declarative_base()


# Erstellen Sie eine Serviceauftragstabelle der Klasse ServiceOrder(Base):
  __tablename__ = "Dienstbestelltabelle"
  id = Spalte(Integer, Primärschlüssel=True, Autoincrement=True)
  serviceOrderId = Spalte (String(32), nullwertfähig=Falsch, Index=Wahr, Kommentar='Service-Bestell-ID')
  serviceDesc = Spalte(String(268), Kommentar='Dienstbeschreibung')
  oneLevelName = Spalte(String(32), Kommentar='C Kategorie')
  twoLevelName = Spalte(String(32), Kommentar='T-Unterklasse')
  threeLevelName = Spalte(String(32), Kommentar='Ich projiziere')
  fourLevelName = Spalte(String(32), Kommentar='S-Unterelement')
  transferTimes = Column(String(32), Kommentar='Anzahl der Transfers')
  overDueStatus = Column(String(32), Kommentar='Abgelaufener Status')
  serviceTimeLimit = Spalte(String(32), Kommentar='Servicezeitlimit')
  serTimeLimitTypeName = Column(String(16), Kommentar='Zeitlimittyp')  
  # Eins-zu-viele:
  # serviceWorkOrder = Beziehung("ServiceWorkOrder", backref="serviceorder")


# Viele-zu-eins: Mehrere Serviceaufträge können zur Serviceauftragsklasse ServiceWorkOrder(Base) gehören:
  __tablename__ = "serviceWorkOrderTable"
  id = Spalte(Integer, Primärschlüssel=True, Autoincrement=True)
  serviceWorkOrderId = Spalte (String(32), nullable=False, index=True, comment='Service-Arbeitsauftrags-ID')
  workOrderName = Spalte(String(268), Kommentar='Arbeitsauftragsname')
  fromId = Spalte(String(32), Kommentar='Service-Auftrags-ID')
  createUserSectionName = Column(String(32), Kommentar='Benutzerabschnitt erstellen')
  createUserName = Spalte(String(32), Kommentar='Ersteller')
  handlerName = Spalte(String(32), Kommentar='Handler')
  statusName = Spalte(String(32), Kommentar='Arbeitsauftragsstatus')
  createTime = Column(String(32), Kommentar='Erstellungszeitpunkt') 
  # Die Buchtabelle auf der "vielen" Seite ist über einen Fremdschlüssel mit der Benutzertabelle verknüpft:
  # serviceOrder_id = Spalte (Ganzzahl, Fremdschlüssel ('serviceOrderTable.id'))

# Erstellen Sie eine Datenbank. Wenn die Datenbank bereits existiert, wird sie nicht erstellt. Es wird eine direkte Verbindung zur vorhandenen Bibliothek gemäß dem Bibliotheksnamen hergestellt. def init_db():
  Base.metadata.create_all(Engine)

def drop_db():
  Base.metadata.drop_all(Engine)

def insert_update():
  # all_needed_data_lists ist das Datenformat, das in die Datenbank eingefügt werden muss [{key: value, ... }, { }, { }...]
  für Element in all_needed_data_lists:
    ServiceOrderRow = ServiceOrder(serviceOrderId=item['serviceOrderId'],
                    serviceDesc=Element['serviceDesc'],
                    oneLevelName=item['oneLevelName'],
                    twoLevelName=Element['twoLevelName'],
                    threeLevelName=item['threeLevelName'],
                    fourLevelName=item['fourLevelName'],
                    transferTimes=item['transferTimes'],
                    overDueStatus=Element['overDueStatus'],
                    serviceTimeLimit=Element['serviceTimeLimit'],
                    serTimeLimitTypeName=Element['serTimeLimitTypeName'],
                    )
    versuchen:
      # Verwenden Sie exists, um zu bestimmen, ob das Zielobjekt existiert, und geben Sie True oder Faults zurück.
      it_exists = Sitzung.Abfrage(
          existiert().wo(ServiceOrder.serviceOrderId == item['serviceOrderId'] )
        ).scalar()
    außer Ausnahme als e:
      selbst.log.error(e)
      brechen
    versuchen:
      # Wenn es nicht existiert, fügen Sie es hinzu; wenn es existiert, aktualisieren Sie die vorhandenen Daten, andernfalls existiert es:
        Sitzung.Hinzufügen(ServiceOrderRow)
      anders:
        Sitzung.Abfrage(ServiceOrder).Filter(ServiceOrder.serviceOrderId == Artikel['serviceOrderId'])\
          .update(Artikel)
    außer Ausnahme als e:
      selbst.log.error(e)
      brechen
  versuchen:
    Sitzung.commit()
    self.log.info('Daten erfolgreich aktualisiert!')
  außer:
    Sitzung.rollback()
    self.log.info('Datenaktualisierung fehlgeschlagen!')

wenn __name__ == "__main__":
  # Erstellen Sie eine Datenbank. Wenn die Datenbank bereits existiert, wird sie nicht erstellt. Sie stellt entsprechend dem Bibliotheksnamen eine direkte Verbindung zur vorhandenen Bibliothek her. init_db()
  # Erstellen Sie ein Sitzungsobjekt zum Hinzufügen, Löschen, Ändern und Abfragen:
  Sitzung = DBSession()
  # Verwenden Sie die Sitzung, um Daten hinzuzufügen oder zu ändern. Denken Sie daran, insert_update() zu übermitteln

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Verwenden von SQLAlchemy zum Durchführen einer Datenbanktabellenprozessanalyse
  • Detaillierte Erläuterung des Python-Codes für SQLAlchemy-Zeitstempel und Kennwortverwaltung
  • So implementieren Sie „Select for Update“ in Python SQLAlchemy
  • So verwenden Sie die Python SQLAlchemy-Bibliothek
  • Einfache Verwendung des beliebten ORM-Frameworks sqlalchemy von Python
  • Übersicht über die Verwendung von SQLAlchemy in Python
  • Grundlegende Verwendung des Python ORM-Frameworks SQLAlchemy
  • SQLAlchemy in Python verwendet die Front-End-Seite zum Einfügen von Daten

<<:  webpack -v Fehlerlösung

>>:  So legen Sie das Root-Passwort des Benutzers und die Remote-Verbindungsmethode für die Alibaba Cloud ECS-Instanz fest

Artikel empfehlen

Detaillierte Erklärung zum Upgrade von Softwarepaketversionen unter Linux

Im Linux-Umfeld möchten Sie prüfen, ob eine besti...

Uniapp implementiert Beispielcode für die Anmeldung mit DingTalk-Scancode

Da Uniapp nicht über eine autorisierte DingTalk-A...

Detaillierte Erläuterung des Speichermodells der JVM-Serie

Inhaltsverzeichnis 1. Speichermodell und Laufzeit...

So machen Sie React-Komponenten im Vollbildmodus

einführen Dieser Artikel basiert auf React + antd...

Natives, benutzerdefiniertes Rechtsklickmenü von js

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Konfiguration des mysql8.x-Docker-Remotezugriffs

Inhaltsverzeichnis Umweltbedingungen Aufgetretene...

Centos7-Startvorgang und Nginx-Startkonfiguration in Systemd

Centos7-Startvorgang: 1.post (Selbsttest beim Ein...

So führen Sie den Betrieb nach dem Verlassen des Docker-Containers weiter aus

Phänomen: Führen Sie ein Image aus, zum Beispiel ...

impress.js Präsentationsschicht-Framework (Demonstrationstool) - erste Erfahrungen

Ich habe ein halbes Jahr lang nicht gebloggt, wofü...

Was wir über absolute und relative CSS-Werte zu sagen haben

In der Einleitung steht: Absolute sagte: „Relativ...

Natives JS zum Erstellen einer Drag-Fotowand

Dieser Artikel zeigt Ihnen eine verschiebbare Fot...