Beispiele für die Interaktion zwischen MySQL und Python

Beispiele für die Interaktion zwischen MySQL und Python

1. Daten vorbereiten

Erstellen einer Datentabelle

- Erstellen Sie die „Jingdong“-Datenbank. create database jing_dong charset=utf8;

- Verwenden Sie die „Jingdong“-Datenbank, verwenden Sie jing_dong;

-- Erstellen Sie eine Warendatentabellecreate table goods(
 id int vorzeichenloser Primärschlüssel auto_increment nicht null,
 Name varchar(150) nicht null,
 cate_name varchar(40) nicht null,
 brand_name varchar(40) nicht null,
 Preis Dezimalzahl (10,3) nicht null Standard 0,
 is_show Bit nicht null Standard 1,
 is_saleoff Bit nicht null Standard 0
);

Einfügen von Daten

-- Daten in die Warentabelle einfügen. In Warenwerte einfügen (0, „r510vc 15,6-Zoll-Notebook“, „Notebook“, „ASUS“, „3399“, Standard, Standard); 
in Warenwerte einfügen (0, „y400n 14,0-Zoll-Laptop“, „Notebook“, „Lenovo“, „4999“, Standard, Standard);
in Warenwerte einfügen (0, „g150. 15,6-Zoll-Gaming-Laptop“, „Gaming-Laptop“, „Thor“, „8499“, Standard, Standard); 
in Warenwerte einfügen (0, „x550cc 15,6-Zoll-Notebook“, „Notebook“, „ASUS“, „2799“, Standard, Standard); 
in Warenwerte einfügen (0, „x240 Ultrabook“, „Ultrabook“, „Lenovo“, „4880“, Standard, Standard); 
in Warenwerte einfügen (0, „u330p 13,3-Zoll-Ultrabook“, „Ultrabook“, „Lenovo“, „4299“, Standard, Standard); 
in Warenwerte einfügen (0, „vp13226scb touch ultrabook“, „Ultrabook“, „Sony“, „7999“, Standard, Standard); 
in Warenwerte einfügen (0, „iPad Mini 7,9-Zoll-Tablet“, „Tablet“, „Apple“, „1998“, Standard, Standard);
in Warenwerte einfügen (0, „iPad Air 9,7 Zoll Tablet“, „Tablet“, „Apple“, „3388“, Standard, Standard); 
in Warenwerte einfügen (0, „iPad Mini mit Retina-Display“, „Tablet“, „Apple“, „2788“, Standard, Standard); 
in Warenwerte einfügen (0, „IdeaCentre C340 20-Zoll-All-in-One-Computer“, „Desktop“, „Lenovo“, „3499“, Standard, Standard); 
in Warenwerte einfügen (0, „Vostro 3800-r1206 Desktop-Computer“, „Desktop“, „Dell“, „2899“, Standard, Standard); 
in Warenwerte einfügen (0, „iMac ME086CH/A 21,5-Zoll-All-in-One-Computer“, „Desktop“, „Apple“, „9188“, Standard, Standard); 
in Warenwerte einfügen (0, ,at7-7414lp Desktop-Computer Linux )‘, ,Desktop‘, ,Acer‘, ,3699‘, Standard, Standard); 
in Warenwerte einfügen (0, 'z220sff f4f06pa workstation', 'Server/Workstation', 'HP', '4288', Standard, Standard); 
in Warenwerte einfügen (0, „Poweredge II Server“, „Server/Workstation“, „Dell“, „5388“, Standard, Standard); 
in Warenwerte einfügen (0, „Mac Pro Professional-Desktop-Computer“, „Server/Workstation“, „Apple“, „28888“, Standard, Standard); 
in Warenwerte einfügen (0, „hmz-t3w am Kopf montiertes Anzeigegerät“, „Laptopzubehör“, „Sony“, „6999“, Standard, Standard); 
in Warenwerte einfügen (0, „Business-Rucksack“, „Laptop-Zubehör“, „Sony“, „99“, Standard, Standard); 
in Warenwerte einfügen (0, „x3250 m4 Rack-Server“, „Server/Workstation“, „IBM“, „6888“, Standard, Standard); 
in Warenwerte einfügen (0, „Business-Rucksack“, „Laptop-Zubehör“, „Sony“, „99“, Standard, Standard);

2. SQL-Übung

1. SQL-Anweisungen stärken

Fragen Sie den Produktnamen und den Preis des Typs cate_name als „Ultrabook“ ab.

Wählen Sie Name und Preis der Waren aus, wobei cate_name = „Superbook“ ist.

Produkttypen anzeigen

Wählen Sie Kategoriename aus der Warengruppe nach Kategoriename aus.

Ermitteln Sie den Durchschnittspreis aller Computerprodukte und behalten Sie zwei Dezimalstellen bei

Wählen Sie „round(avg(price),2)“ als Durchschnittspreis von Waren.

Zeigt den Durchschnittspreis jedes Produkts an

Wählen Sie Cate_Name, Durchschnitt (Preis) aus der Warengruppe nach Cate_Name.

Abfrage des teuersten, günstigsten, durchschnittlichen Preises und der Menge jedes Produkttyps

Wählen Sie Kategoriename, Max(Preis), Min(Preis), Durchschnitt(Preis), Anzahl(*) aus der Warengruppe nach Kategoriename.

Abfrage aller Produkte deren Preis über dem Durchschnittspreis liegt und absteigend nach Preis sortieren

Wählen Sie ID, Name und Preis der Ware aus 
wobei Preis > (select round(avg(price),2) als Durchschnittspreis von Waren) 
Sortierung nach Preis absteigend;

Finden Sie die teuersten Computer jedes Typs

Wählen Sie * aus Waren
innerer Join 
 (
  wählen
  Katzenname, 
  max(Preis) als max_Preis, 
  min(Preis) als min_Preis, 
  Durchschnitt(Preis) als Durchschnittspreis, 
  count(*) aus Warengruppe nach cate_name
 ) als Warenneuheitsinfo 
auf goods.cate_name=goods_new_info.cate_name und goods.price=goods_new_info.max_price;

2. Erstellen Sie eine Tabelle „Produktkategorie“

-- Erstellen Sie eine Warenkategorietabelle. create table, falls nicht vorhanden goods_cates(
 id int vorzeichenloser Primärschlüssel auto_increment,
 Name varchar(40) nicht null
);

Abfrage der Warenarten in der Warentabelle

Wählen Sie Kategoriename aus der Warengruppe nach Kategoriename aus.

Schreiben Sie die Gruppierungsergebnisse in die Datentabelle goods_cates

in Warenkategorien (Name) einfügen, Kategorienname aus der Warengruppe nach Kategorienname auswählen;

3. Tabellendaten synchronisieren

Aktualisieren Sie die Warentabelle über die Datentabelle „goods_cates“

Aktualisiere Waren als g, innerer Join Waren_Kategorisierungen als c auf g.cate_name=c.name, setze g.cate_name=c.id;

4. Erstellen Sie die Tabelle „Produktmarkentabelle“

Verwenden Sie create...select, um eine Datentabelle zu erstellen und gleichzeitig Datensätze zu schreiben, Schritt für Schritt

-- wählen Sie den Markennamen aus der Warengruppe nach Markennamen;

-- Daten beim Erstellen der Datentabelle zusammen einfügen -- Hinweis: Sie müssen as als Alias ​​für den Markennamen verwenden, sonst hat das Namensfeld keinen Wert. Tabelle Warenmarken erstellen (
 id int vorzeichenloser Primärschlüssel auto_increment,
 Name varchar (40) nicht null) Wählen Sie Markenname als Namen aus der Warengruppe nach Markenname aus.

5. Daten synchronisieren

Aktualisieren Sie die Warendatentabelle über die Warenmarkendatentabelle

Aktualisiere Waren als g, verbinde innerlich Warenmarken als b auf g.Markenname=b.Name, setze g.Markenname=b.ID;

6. Ändern Sie die Tabellenstruktur

Wenn Sie sich die Datentabellenstruktur der Waren ansehen, werden Sie feststellen, dass die entsprechenden Typen von cate_name und brand_name varchar sind, es sich jedoch alle um Zahlen handelt.

Beschreibung der Waren;

Ändern Sie die Tabellenstruktur mit der Anweisung „alter table“

Tischwaren ändern 
ändere cate_name cate_id int unsigned not null,
Markennamen, Marken-ID ändern, int ohne Vorzeichen, nicht null;

7. Fremdschlüssel

Einfügen von Datensätzen in die Tabellen goods_cates und goods_brands

in goods_cates(Name) Werte einfügen ('Router'), ('Switch'), ('Netzwerkkarte');
in warenmarken(name) Werte einfügen („Haier“), („Tsinghua Tongfang“), („Shenzhou“);

Schreiben Sie einen beliebigen Datensatz in die Warentabelle

in Waren einfügen (Name, Kat.-ID, Marken-ID, Preis)
Werte('LaserJet Pro P1606dn Schwarzweiß-Laserdrucker', 12, 4,'1849');

Detaillierte Informationen zu allen Produkten abfragen (über interne Verknüpfung)

Wählen Sie g.id, g.name, c.name, b.name, g.price aus Waren als g
innerer Join goods_cates als c auf g.cate_id=c.id
innerer Join Warenmarken als b auf g.brand_id=b.id;

Abfrage der Detailinformationen aller Produkte (über Left Join)

Wählen Sie g.id, g.name, c.name, b.name, g.price aus Waren als g
links beitreten goods_cates als c auf g.cate_id=c.id
links Warenmarken als b mit g.brand_id=b.id verbinden;
  • Wie können wir das Einfügen ungültiger Informationen verhindern, d. h. vor dem Einfügen feststellen, ob der Typ oder Markenname vorhanden ist? Zur Lösung dieses Problems können wir den zuvor erwähnten Fremdschlüssel verwenden.
  • Fremdschlüsseleinschränkung: Überprüfen Sie die Gültigkeit der Daten
  • Schlüsselwörter: Fremdschlüssel, nur die InnoDB-Datenbank-Engine unterstützt Fremdschlüsseleinschränkungen
  • So aktualisieren Sie Fremdschlüsseleinschränkungen für vorhandene Datentabellen
-- Erfolgreich Fremdschlüsseleinschränkung zur Marken-ID hinzugefügt. Tabelle „Waren“ ändern. Fremdschlüssel (Marken-ID) mit Verweisen auf Warenmarken (ID) hinzufügen.
-- Fehler beim Hinzufügen des Fremdschlüssels zur cate_id -- Fehler 1452 wird angezeigt -- Fehlerursache: Es wurde eine nicht vorhandene cate_id mit dem Wert 12 hinzugefügt, daher muss dieser zuerst gelöscht werden. Alter Table Goods: Add Foreign Key (cate_id) References Goods_Cates(id);
  • Wie werden beim Erstellen einer Datentabelle Fremdschlüsseleinschränkungen festgelegt?
  • Hinweis: Der Typ der cate_id in goods muss mit dem ID-Typ in der Tabelle goods_cates übereinstimmen.
Tabelle erstellen Waren(
 id int Primärschlüssel auto_increment nicht null,
 Name varchar(40) Standard '',
 Preis Dezimalzahl (5,2),
 cate_id int unsigniert,
 brand_id int unsigniert,
 is_show-Bit Standard 1,
 is_saleoff Bit Standard 0,
 Der Fremdschlüssel (cate_id) verweist auf goods_cates(id),
 Der Fremdschlüssel (Marken-ID) verweist auf die Warenmarke (ID).
);

So entfernen Sie Fremdschlüsseleinschränkungen

-- Sie müssen zuerst den Namen der Fremdschlüsseleinschränkung abrufen. Der Name wird automatisch vom System generiert. Sie können den Namen abrufen, indem Sie die Anweisung zur Tabellenerstellung anzeigen: show create table goods;
-- Nachdem Sie den Namen erhalten haben, können Sie die Fremdschlüsseleinschränkung entsprechend dem Namen „Alter Table Goods“ löschen, „Fremdschlüssel“ und „Fremdschlüsselname“ löschen.

In der tatsächlichen Entwicklung werden Fremdschlüsseleinschränkungen selten verwendet, was die Effizienz von Tabellenaktualisierungen erheblich verringert.

3. Datenbankdesign

Erstellen Sie eine Tabelle „Produktkategorie“ (sie wurde bereits zuvor erstellt und muss nicht erneut erstellt werden).

Tabelle Goods_Cates erstellen (
 id int vorzeichenloser Primärschlüssel auto_increment nicht null,
 Name varchar(40) nicht null
);

Erstellen Sie eine Tabelle „Produktmarke“ (sie wurde bereits erstellt, Sie müssen sie nicht erneut erstellen)

Tabelle Warenmarken erstellen (
 id int vorzeichenloser Primärschlüssel auto_increment nicht null,
 Name varchar(40) nicht null
);

Erstellen Sie eine Tabelle „Produkte“ (sie wurde bereits erstellt, Sie müssen sie nicht erneut erstellen)

Tabelle erstellen Waren(
 id int vorzeichenloser Primärschlüssel auto_increment nicht null,
 Name varchar(40) Standard '',
 Preis Dezimalzahl (5,2),
 cate_id int unsigniert,
 brand_id int unsigniert,
 is_show-Bit Standard 1,
 is_saleoff Bit Standard 0,
 Der Fremdschlüssel (cate_id) verweist auf goods_cates(id),
 Der Fremdschlüssel (Marken-ID) verweist auf die Warenmarke (ID).
);

Erstellen Sie eine Tabelle „Kunden“

Tabelle Kunde erstellen(
 id int unsigned auto_increment Primärschlüssel nicht null,
 Name varchar(30) nicht null,
 Adresse varchar(100),
 tel varchar(11) nicht null
);

Erstellen Sie eine Tabelle „Bestellungen“

Tischbestellungen erstellen(
 id int unsigned auto_increment Primärschlüssel nicht null,
 order_date_time datetime nicht null,
 Kunden-ID int unsigniert,
 Fremdschlüssel (Kunden-ID) verweist auf Kunden-ID
);

Erstellen Sie eine Tabelle „Bestelldetails“

Tabelle order_detail erstellen(
 id int unsigned auto_increment Primärschlüssel nicht null,
 order_id int unsigniert nicht null,
 goods_id int unsigned nicht null,
 Menge tinyint unsigned nicht null,
 Der Fremdschlüssel (order_id) verweist auf Bestellungen (id),
 Der Fremdschlüssel (Waren-ID) verweist auf die Waren-ID.
);

veranschaulichen

  • Die Reihenfolge der Erstellung der Tabellen ist oben vorgeschrieben. Das heißt, wenn die Fremdschlüsseleinschränkung in der Tabelle „goods_cates“ oder „goods_brands“ verwendet, müssen diese beiden Tabellen zuerst erstellt werden, da sonst die Erstellung der Tabelle „goods“ fehlschlägt.
  • Achten Sie beim Erstellen eines Fremdschlüssels unbedingt darauf, dass der Typ derselbe ist, da es sonst zu einem Fehler kommt.

4. Schritte zum Bedienen von MySQL in Python

Module importieren

Importieren Sie das pymysql-Modul in die py-Datei

vom pymysql-Import *

Verbindungsobjekt

  • Wird verwendet, um eine Verbindung mit der Datenbank herzustellen
  • Erstellen Sie ein Objekt: Rufen Sie die Methode connect() auf
conn=connect(Parameterliste)
  • Parameter Host: der MySQL-Host, mit dem eine Verbindung hergestellt werden soll, wenn der lokale Computer „localhost“ ist.
  • Parameterport: der Port des MySQL-Hosts, mit dem eine Verbindung hergestellt werden soll, der Standardwert ist 3306
  • Parameterdatenbank: der Name der Datenbank
  • Parameter user: der Benutzername der Verbindung
  • Parameter Passwort: Verbindungspasswort
  • Parameter-Zeichensatz: Die für die Kommunikation verwendete Kodierungsmethode. UTF8 wird empfohlen.

Objektmethoden

  • close() schließt die Verbindung
  • begehen()
  • cursor() gibt ein Cursor-Objekt zurück, das zum Ausführen von SQL-Anweisungen und Abrufen von Ergebnissen verwendet wird.

Cursor-Objekt

  • Wird zum Ausführen von SQL-Anweisungen verwendet. Die am häufigsten verwendeten Anweisungen sind „Select“, „Insert“, „Update“ und „Delete“.
  • Holen Sie sich das Cursor-Objekt: Rufen Sie die Cursor()-Methode des Connection-Objekts auf
cs1 = conn.cursor()

Objektmethoden

  • schließen()
  • execute(operation [, parameters ]) führt die Anweisung aus und gibt die Anzahl der betroffenen Zeilen zurück. Wird hauptsächlich verwendet, um Insert-, Update- und Delete-Anweisungen auszuführen. Es kann auch Create-, Alter- und Drop-Anweisungen ausführen.
  • fetchone() führt eine Abfrageanweisung aus, ruft die erste Datenzeile im Abfrageergebnissatz ab und gibt ein Tupel zurück
  • Wenn fetchall() eine Abfrage ausführt, ruft es alle Zeilen des Ergebnissatzes ab, wobei jede Zeile ein Tupel darstellt, und diese Tupel werden dann in ein Tupel eingefügt und zurückgegeben.

Objekteigenschaften

  • schreibgeschütztes Attribut „rowcount“, das die Anzahl der Zeilen angibt, die von der letzten „execute()“-Ausführung betroffen waren
  • VerbindungHolen Sie sich das aktuelle Verbindungsobjekt

5. Hinzufügen, löschen, ändern und prüfen

vom pymysql-Import *

def main():
 # Verbindung erstellen conn = connect(host='localhost',port=3306,database='jing_dong',user='root',password='mysql',charset='utf8')
 # Holen Sie sich das Cursor-Objekt cs1 = conn.cursor()
 # Führen Sie die Insert-Anweisung aus und geben Sie die Anzahl der betroffenen Zeilen zurück: Fügen Sie ein Datenelement hinzu. # Erhöhen Sie die Anzahl = cs1.execute('insert into goods_cates(name) values("hard disk")')
 #Drucken Sie die Anzahl der betroffenen Zeilen print(count)

 Anzahl = cs1.execute('in Warengruppen(Name) Werte("CD") einfügen')
 drucken(Anzahl)

 # # Update # count = cs1.execute('update goods_cates set name="Mechanische Festplatte" where name="Festplatte"')
 # # Löschen # count = cs1.execute('löschen aus goods_cates where id=6')

 # Senden Sie die vorherige Operation. Wenn Sie sie bereits mehrmals ausgeführt haben, senden Sie sie alle ab conn.commit()

 # Schließen Sie das Cursor-Objekt cs1.close()
 # Schließen Sie das Verbindungsobjekt conn.close()

wenn __name__ == '__main__':
 hauptsächlich()

Abfragen einer Datenzeile

vom pymysql-Import *

def main():
 # Verbindung erstellen conn = connect(host='localhost',port=3306,user='root',password='mysql',database='jing_dong',charset='utf8')
 # Holen Sie sich das Cursor-Objekt cs1 = conn.cursor()
 # Führen Sie die Select-Anweisung aus und geben Sie die Anzahl der betroffenen Zeilen zurück: Abfrage einer Datenanzahl = cs1.execute('select id,name from goods where id>=4')
 # Drucken Sie die Anzahl der betroffenen Zeilen print("%d Daten gefunden: " % Anzahl)

 für i im Bereich (Anzahl):
  # Abfrageergebnis abrufen result = cs1.fetchone()
  # Drucken Sie das Abfrageergebnis print(result)
  # Abfrageergebnisse abrufen # Cursorobjekt schließen cs1.close()
 conn.close()

wenn __name__ == '__main__':
 hauptsächlich()

Abfragen mehrerer Datenzeilen

vom pymysql-Import *

def main():
 # Verbindung erstellen conn = connect(host='localhost',port=3306,user='root',password='mysql',database='jing_dong',charset='utf8')
 # Holen Sie sich das Cursor-Objekt cs1 = conn.cursor()
 # Führen Sie die Select-Anweisung aus und geben Sie die Anzahl der betroffenen Zeilen zurück: Abfrage einer Datenanzahl = cs1.execute('select id,name from goods where id>=4')
 # Drucken Sie die Anzahl der betroffenen Zeilen print("%d Daten gefunden: " % Anzahl)

 # für i im Bereich (Anzahl):
 # # Holen Sie sich das Abfrageergebnis# result = cs1.fetchone()
 # # Drucken Sie die Abfrageergebnisse# print(result)
 # # Abfrageergebnisse abrufen result = cs1.fetchall()
 drucken(Ergebnis)

 # Schließen Sie das Cursor-Objekt cs1.close()
 conn.close()

wenn __name__ == '__main__':
 hauptsächlich()

6. Parametrierung

  • Durch die Parametrisierung von SQL-Anweisungen kann SQL-Injection wirksam verhindert werden
  • Hinweis: Dies unterscheidet sich von der Python-Zeichenfolgenformatierung, alle verwenden %s-Platzhalter
vom pymysql-Import *

def main():

 find_name = input("Bitte geben Sie den Namen des Artikels ein:")

 # Verbindung erstellen conn = connect(host='localhost',port=3306,user='root',password='mysql',database='jing_dong',charset='utf8')
 # Holen Sie sich das Cursor-Objekt cs1 = conn.cursor()


 # # Unsichere Methode # # Geben Sie " oder 1=1 oder " ein (geben Sie auch doppelte Anführungszeichen ein)
 # sql = 'Wählen Sie * aus Waren aus, wobei Name = "%s"' % find_name
 # drucken("""sql===>%s<====""" % sql)
 # # Select-Anweisung ausführen und Anzahl der betroffenen Zeilen zurückgeben: Alle Daten abfragen # count = cs1.execute(sql)

 # Sicherer Weg # Parameterliste erstellen params = [find_name]
 # Führen Sie die Select-Anweisung aus und geben Sie die Anzahl der betroffenen Zeilen zurück: Alle Daten abfragen count = cs1.execute('select * from goods where name=%s', params)
 # Beachten:
 # Wenn mehrere Parameter vorhanden sind, ist eine Parametrisierung erforderlich. # Dann ist params = [Wert 1, Wert 2....], dann sind mehrere %s in der SQL-Anweisung vorhanden. # Drucken Sie die Anzahl der betroffenen Zeilen print(count)
 # Holen Sie sich das Abfrageergebnis# result = cs1.fetchone()
 Ergebnis = cs1.fetchall()
 # Drucken Sie das Abfrageergebnis print(result)
 # Schließen Sie das Cursor-Objekt cs1.close()
 # Schließen Sie das Verbindungsobjekt conn.close()

wenn __name__ == '__main__':
 hauptsächlich()

Oben sind die Einzelheiten des Beispiels der Interaktion zwischen MySQL und Python aufgeführt. Weitere Informationen zur Interaktion zwischen MySQL und Python finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Python MySQL zur Realisierung eines Schülerleistungsmanagementsystems
  • Python+MySQL zur Implementierung eines persönlichen Papierverwaltungssystems
  • Python implementiert ein auf MySQL basierendes Studentenverwaltungssystem
  • Implementierung der Interaktion zwischen Python und MySQL-Datenbank
  • Beispielcode für ein Python-Verwaltungssystem zur Implementierung der MySQL-Interaktion

<<:  Lösung für das Docker-Pull-Timeout

>>:  VUE implementiert eine Timeline-Wiedergabekomponente

Artikel empfehlen

Tutorial zur MySQL-Datensicherungsmethode mit Multi-Master und One-Slave

Überblick Vorgänge, die auf einer Datenbank ausge...

Verwendung des Linux-Befehls ls

1. Einleitung Der Befehl ls dient zum Anzeigen de...

MySQL-Benutzer und -Berechtigungen und Beispiele zum Knacken des Root-Passworts

MySQL-Benutzer und -Berechtigungen In MySQL gibt ...

W3C Tutorial (8): W3C XML Schema Aktivitäten

XML Schema ist eine XML-basierte Alternative zu D...