Python - Pymysql (11)

Wie bereits erwähnt, können Dateien oder einfacher persistenter Speicher die Anforderungen einiger kleiner Anwendungen erfüllen, während große Server oder Anwendungen mit hoher Datenkapazität ein ausgereifteres Datenbanksystem erfordern. Aber jetzt ist die Zeit für Big Data gekommen. Neben relationalen Daten werden auch nicht relationale Datenbanken unterstützt, damit sich die Leistungsvorteile auf dem "Three Highs" -System widerspiegeln können. Dieser Artikel beschreibt hauptsächlich die Kommunikation zwischen Python und der relationalen Datenbank (MySQL).

Hauptinhalt

1 Technische Punkte für Master
2 Installieren von pymysql
3 Einführung in pymysql.cursors und pymysql.connections
4 Implementieren Sie einfache CRUD-Fälle

Müssen die technischen Punkte beherrschen

1 muss die Grundoperation der MySQL-Daten sein, um beispielsweise das Schreiben grundlegender Konzepte der Datenbank-SQL-Anweisung zu kennen. Wenn sie nicht verstehen, dass die Schüler zu Rookie-Tutorials gehen können, müssen MySQL-Tutorials .
2 müssen die Syntax Python-basiert kennen, Immerhin ist von pymysql Python, Programme zu schreiben, um Datendaten zu verarbeiten.

Installieren Sie pymysql

Detaillierte Erklärung der Pymysql-Installation .

pymysql.connections

In einer objektorientierten Welt ist alles ein Objekt. Verbindungen stellen die Notwendigkeit dar, eine Datenbankverbindung für die Kommunikation zwischen einer Anwendung und einer Datenbank herzustellen. Dies ist der grundlegendste Mechanismus. Nur über eine Datenbankverbindung können Befehle an den Server übergeben und die zurückgegebenen Ergebnisse abgerufen werden. Wenn eine Verbindung (oder ein Verbindungspool) hergestellt wird, können Sie einen Cursor erstellen, eine Anforderung an die Datenbank senden und dann eine Antwort von der Datenbank erhalten.
Detaillierte Erläuterung der gängigen Methoden der Verbindungsklasse:

Methodenname Beschreibung
schließen() Datenbankverbindung schließen
verpflichten() Übernehmen Sie die aktuelle Transaktion
Rollback () Aktuelle Transaktion abbrechen
Mauszeiger() Verwenden Sie diese Verbindung, um einen Cursor oder ein Cursor-ähnliches Objekt zu erstellen (und zurückzugeben)
Fehlerbehandlungsroutine (cxn, cur, errcls, errval) Als Handler für den Cursor einer bestimmten Verbindung

pymysql.cursors

Cursor Mit Cursorn können Benutzer Datenbankbefehle senden und die Ergebnisse der Abfrage abrufen

Detaillierte Erläuterung der gängigen Methoden der Cursor-Klasse

Methodenname oder Attribut Beschreibung
Arraysize Bei Verwendung der Methode fetchmany () ist die Anzahl der gleichzeitig abgerufenen Ergebniszeilen der Standardwert 1
Verbindung Erstellen Sie die Verbindung für diesen Cursor (optional)
Beschreibung Geben Sie den Cursor-Aktivitätsstatus (Tupel mit 7 Elementen) zurück: (Name, Typcode, Anzeigegröße, interne Größe, Genauigkeit, Skalierung, null_ok), nur Name und Typcode sind erforderlich
lastrowid Die Zeilen-ID der zuletzt geänderten Zeile (optional; wenn die Zeilen-ID nicht unterstützt wird, wird Keine zurückgegeben)
Reihenanzahl Die Anzahl der Zeilen, die von der letzten Methode execute * () verarbeitet oder beeinflusst wurden
callproc (func [, args]) Speichern Sie die gespeicherte Prozedur
schließen() Cursor schließen
execute (op [, args]) Führen Sie eine Datenbankabfrage oder einen Befehl aus
ausführende (op , args) Bereiten Sie ähnlich wie bei der Kombination von execute () und map () Datenbankabfragen oder -befehle für alle angegebenen Parameter vor und führen Sie sie aus
fetchone () Ruft die nächste Zeile des Abfrageergebnisses ab
fetchmany ([Größe = Cursor. Arraysize]) Rufen Sie die folgende Größenzeile des Abfrageergebnisses ab
fetchall () Alle (verbleibenden) Zeilen mit Abfrageergebnissen abrufen
iter () Erstellen Sie ein Iteratorobjekt für den Cursor (optional, siehe next ())
Mitteilungen Liste der Nachrichten, die aus der Datenbank abgerufen wurden, nachdem der Cursor ausgeführt wurde (Tupel gesetzt, optional)
Nächster () Wird vom Iterator verwendet, um die nächste Zeile des Abfrageergebnisses abzurufen (optional, ähnlich wie bei fetchone (), siehe __iter __ ()).
nextset () Zur nächsten Ergebnismenge wechseln (falls unterstützt)
Zeilennummer Der Index des Cursors in der aktuellen Ergebnismenge (in Zeileneinheiten ab 0, optional)
setinputsizes (Größen) Legen Sie die maximal zulässige Eingabegröße fest (muss vorhanden sein, die Implementierung ist jedoch optional).
setoutputsize (size [, col]) Legen Sie die maximale Puffergröße für große Spalten fest (muss vorhanden sein, die Implementierung ist jedoch optional).

Implementieren Sie einen einfachen CRUD-Fall

Daten abfragen

import  pymysql
#获取连接对象
connection = pymysql.connect("localhost","root","root","users",charset="utf8")
#通过连接对象获取游标
cursor = connection.cursor()
#操作数据
sql = "select * from my_user"
cursor.execute(sql)
#返回影响的行数
#print(cursor.rowcount)

#获取查询数据
#fetchone 获取单条数据   返回是元组类型
# result = cursor.fetchone()
# for message in result:
#     print(message)

#获取全部数据
for  id,name,address,sex,phone,age,pw in cursor.fetchall():
    print(id,name,address,phone,age,pw)

#带参数查询
#操作数据   (查询id= 3  这条记录)
#================1 参数和写死在str中====================
#   sql = "select * from my_user where u_id = 3"
#cursor.execute(sql)

#=============2 str动态拼接=  (解决不了sql注入问题)====================
# sql = "select * from my_user where u_id = %d " % (4)
# cursor.execute(sql)

#=======3  通过cursor.execute(sql,arge) 参数来实现=====(可以解决sql注入问题)==============
sql = "select * from my_user where u_id = %s "
cursor.execute(sql,[4])

#关闭资源
cursor.close()
connection.close()

SQL-Injektionsproblem

#sql注入问题
import  pymysql
#获取连接对象
connection = pymysql.connect("localhost","root","root","users",charset="utf8")
#通过连接对象获取游标
cursor = connection.cursor()


name = "'admin' or 1=1 -- "
pw = "123"

#=============2 str动态拼接=  (解决不了sql注入问题)====================
# sql = "select * from my_user where u_name=%s and u_password=%s" % (name,pw)
# cursor.execute(sql)

#=======3  通过cursor.execute(sql,arge) 参数来实现=====(可以解决sql注入问题)==============
sql = "select * from my_user where u_name=%s and u_password=%s"
cursor.execute(sql,[name,pw])


#fetchone 获取单条数据   返回是元组类型
print(cursor.fetchone())

#关闭资源
cursor.close()

Daten einfügen

import  pymysql
# 1 Connection 连接  事务 默认是手动提交
message ={"host":"localhost","user":"root","password":"root","database":"test","charset":"utf8"}
connection  =  pymysql.connect(**message)
# 2 通过connectin对象获取游标
cursor = connection.cursor()
#3  执行语句
#sql ="insert into dept values (null,'研发')"
#添加动态的数据,但是避免不了sql注入
sql ="insert into dept values (null,'%s')" % "行政"
#print(sql)
#添加动态的数据 可以防止sql注入
#sql ="insert into dept values (null,%s)"
#print(sql)
#print(cursor.execute(sql,["人事"]))
print(cursor.execute(sql))
#手动提交事务
connection.commit()
#关闭数据连接
cursor.close()
connection.close()

Daten löschen

# pymysql 连接数据(删除数据)
import  pymysql

#根据地址 ,端口  ,用户  密码,获取连接
message= {"host":"localhost","user":"root","password":"root","database":"test","charset":"utf8"}
#connection = pymysql.connect("localhost","root","root","test")
connection = pymysql.connect(**message)
# 通过连接对象 去获取游标对象  (执行sql)
cursor = connection.cursor()

sql = "delete from myuser where u_id =%s"
#cursor.execute(sql,["李四2","深圳市xx","男",22,12121])
number = cursor.execute(sql,[70])
print(number)
#提交事务
connection.commit()
#关闭资源
cursor.close()
connection.close()

Ändern Sie die Daten

# pymysql 连接数据(修改数据)
import  pymysql

#根据地址 ,端口  ,用户  密码,获取连接
message= {"host":"localhost","user":"root","password":"root","database":"test","charset":"utf8"}
#connection = pymysql.connect("localhost","root","root","test")
connection = pymysql.connect(**message)
# 通过连接对象 去获取游标对象  (执行sql)
cursor = connection.cursor()

sql = "update myuser set u_name=%s where  u_id=%s"
#cursor.execute(sql,["李四2","深圳市xx","男",22,12121])
number = cursor.execute(sql,["张三2",70])
print(number)
#提交事务
connection.commit()
#关闭资源
cursor.close()
connection.close()

Wenn Sie bei jedem Vorgang Code schreiben müssen, um Verbindungen zu erhalten, SQL auszuführen und Ressourcen zu schließen, ist dies definitiv unangemessen. Informationen zur Wiederverwendung des Codes finden Sie in der späteren Aktualisierung. Vielen Dank!

Ich denke du magst

Origin blog.csdn.net/yipianfeng_ye/article/details/82761105
Empfohlen
Rangfolge