Heim  >  Artikel  >  Backend-Entwicklung  >  Zu vollständig! Eine Sammlung von Tutorials zur Verwendung von Python zum Betrieb von MySQL!

Zu vollständig! Eine Sammlung von Tutorials zur Verwendung von Python zum Betrieb von MySQL!

WBOY
WBOYnach vorne
2023-04-14 08:40:021881Durchsuche

Zu vollständig! Eine Sammlung von Tutorials zur Verwendung von Python zum Betrieb von MySQL!

1. Einführung in die Python-Operationsdatenbank

Python-Standarddatenbankschnittstelle ist Python DB-API, Python DB-API ist für die Entwicklung Stellt eine Programmierschnittstelle für Datenbankanwendungen bereit. Die Python-Datenbankschnittstelle unterstützt viele Datenbanken. Sie können die Datenbank auswählen, die zu Ihrem Projekt passt: MySQL 🎜 Informix 🎜🎜 #

Sie können die Python-Datenbankschnittstelle und API besuchen, um eine detaillierte Liste der unterstützten Datenbanken anzuzeigen Datenbanken.

  • Sie müssen verschiedene DB-API-Module für verschiedene Datenbanken herunterladen. Wenn Sie beispielsweise auf Oracle-Datenbank- und MySQL-Daten zugreifen müssen, müssen Sie Oracle- und MySQL-Datenbankmodule herunterladen.

  • DB-API ist eine Spezifikation. Sie definiert eine Reihe notwendiger Objekte und Datenbankzugriffsmethoden, um verschiedene zugrunde liegende Datenbanksysteme und verschiedene Datenbankschnittstellen bereitzustellen.

  • Pythons DB-API implementiert Schnittstellen für die meisten Datenbanken. Nachdem Sie es zum Herstellen einer Verbindung zu jeder Datenbank verwendet haben, können Sie jede Datenbank auf die gleiche Weise bedienen.

  • Python DB-API-Nutzungsprozess:

  • Einführung in das API-Modul.

  • Stellen Sie die Verbindung zur Datenbank her.

  • SQL-Anweisungen und gespeicherte Prozeduren ausführen.

  • Schließen Sie die Datenbankverbindung.

2. Python-Operation MySQL-Modul


Python verwendet hauptsächlich zwei Methoden, um MySQL zu betreiben:

#🎜🎜 #
DB-Modul (natives SQL)


PyMySQL (unterstützt Python2.x/3.x)


MySQLdb (Unterstützt derzeit nur Python2.x) 🎜#

2.1 PyMySQL-Modul

    In diesem Artikel wird hauptsächlich das PyMySQL-Modul vorgestellt. Die Verwendung von MySQLdb ähnelt
  • #. 🎜🎜#
  • 2.1.1 PyMySQL installieren

  • PyMySQL ist ein in Python geschriebener MySQL-Treiber, der es uns ermöglicht, die MySQL-Datenbank mit der Python-Sprache zu betreiben.

  • pip install PyMySQL
  • 2.2 Grundlegende Verwendung

  • #! /usr/bin/env python
    # -*- coding: utf-8 -*-
    # __author__ = "shuke"
    # Date: 2018/5/13
    import pymysql
    # 创建连接
    conn = pymysql.connect(host="127.0.0.1", port=3306, user='zff', passwd='zff123', db='zff', charset='utf8mb4')
    # 创建游标(查询数据返回为元组格式)
    # cursor = conn.cursor()
    # 创建游标(查询数据返回为字典格式)
    cursor = conn.cursor(pymysql.cursors.DictCursor)
    # 1. 执行SQL,返回受影响的行数
    effect_row1 = cursor.execute("select * from USER")
    # 2. 执行SQL,返回受影响的行数,一次插入多行数据
    effect_row2 = cursor.executemany("insert into USER (NAME) values(%s)", [("jack"), ("boom"), ("lucy")])# 3
    # 查询所有数据,返回数据为元组格式
    result = cursor.fetchall()
    # 增/删/改均需要进行commit提交,进行保存
    conn.commit()
    # 关闭游标
    cursor.close()
    # 关闭连接
    conn.close()
    print(result)
    """
    [{'id': 6, 'name': 'boom'}, {'id': 5, 'name': 'jack'}, {'id': 7, 'name': 'lucy'}, {'id': 4, 'name': 'tome'}, {'id': 3, 'name': 'zff'}, {'id': 1, 'name': 'zhaofengfeng'}, {'id': 2, 'name': 'zhaofengfeng02'}]
    """
  • 2.3 Holen Sie sich die zuletzt erstellte Daten-Auto-Inkrement-ID

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "shuke"
# Date: 2018/5/13
import pymysql
# 创建连接
conn = pymysql.connect(host="127.0.0.1", port=3306, user='zff', passwd='zff123', db='zff', charset='utf8mb4')
# 创建游标(查询数据返回为元组格式)
cursor = conn.cursor()
# 获取新创建数据自增ID
effect_row = cursor.executemany("insert into USER (NAME)values(%s)", [("eric")])
# 增删改均需要进行commit提交
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
new_id = cursor.lastrowid
print(new_id)
"""
8
"""
#🎜 🎜 #2.4 Abfragevorgang

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "shuke"
# Date: 2018/5/13
import pymysql
# 创建连接
conn = pymysql.connect(host="127.0.0.1", port=3306, user='zff', passwd='zff123', db='zff', charset='utf8mb4')
# 创建游标
cursor = conn.cursor()
cursor.execute("select * from USER")
# 获取第一行数据
row_1 = cursor.fetchone()
# 获取前n行数据
row_2 = cursor.fetchmany(3)
#
# # 获取所有数据
row_3 = cursor.fetchall()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
print(row_1)
print(row_2)
print(row_3)

⚠️ Fahren Sie beim Abrufen von Daten der Reihe nach fort. Sie können die Cursorposition mit „cursor.scroll(num, mode)“ verschieben, z. B.: #🎜🎜 ##🎜🎜 #

Cursor.scroll(1,mode='relative') #Bewegen Sie sich relativ zur aktuellen Position


Cursor.scroll(2, mode='absolute') # Relative absolute Positionsbewegung

  • 2.5 SQL-Injection verhindern

  • #! /usr/bin/env python
    # -*- coding: utf-8 -*-
    # __author__ = "shuke"
    # Date: 2018/5/13
    import pymysql
    # 创建连接
    conn = pymysql.connect(host="127.0.0.1", port=3306, user='zff', passwd='zff123', db='zff', charset='utf8mb4')
    # 创建游标
    cursor = conn.cursor()
    # 存在sql注入情况(不要用格式化字符串的方式拼接SQL)
    sql = "insert into USER (NAME) values('%s')" % ('zhangsan',)
    effect_row = cursor.execute(sql)
    # 正确方式一
    # execute函数接受一个元组/列表作为SQL参数,元素个数只能有1个
    sql = "insert into USER (NAME) values(%s)"
    effect_row1 = cursor.execute(sql, ['wang6'])
    effect_row2 = cursor.execute(sql, ('wang7',))
    # 正确方式二
    sql = "insert into USER (NAME) values(%(name)s)"
    effect_row1 = cursor.execute(sql, {'name': 'wudalang'})
    # 写入插入多行数据
    effect_row2 = cursor.executemany("insert into USER (NAME) values(%s)", [('ermazi'), ('dianxiaoer')])
    # 提交
    conn.commit()
    # 关闭游标
    cursor.close()
    # 关闭连接
    conn.close()
  • Auf diese Weise SQL-Operationen sind sicherer. Wenn Sie eine detailliertere Dokumentation benötigen, lesen Sie bitte die PyMySQL-Dokumentation. Es scheint jedoch, dass die Implementierung dieser SQL-Datenbanken nicht dieselbe ist. Der Parameterplatzhalter von PyMySQL verwendet den C-Formatierer wie %s, während der Platzhalter des sqlite3-Moduls, das mit Python geliefert wird, ein Fragezeichen (?) zu sein scheint. . Daher ist es besser, die Dokumentation sorgfältig zu lesen, wenn Sie andere Datenbanken verwenden. Willkommen in der Dokumentation von PyMySQL

3 Datenbankverbindungspool

  • Es gibt ein Problem mit der oben genannten Methode, das in einem einzigen Schritt gelöst werden kann. Threaded-Fall, und das Programm muss häufig Verbindungen erstellen und freigeben, um Datenbankvorgänge abzuschließen. Welche Probleme werden unsere Programme/Skripte derzeit in Multithread-Situationen verursachen?
  • # 🎜🎜#
3.1 DBUtils-Modul


DBUtils ist ein Modul von Python, das zur Implementierung des Datenbankverbindungspools verwendet wird.


Dieser Verbindungspool verfügt über zwei Verbindungsmodi:

Erstellen Sie eine Verbindung für jeden Thread, auch wenn der Thread die Close-Methode aufruft , wird es nicht geschlossen, sondern lediglich die Verbindung zurück in den Verbindungspool gestellt, damit ihr eigener Thread sie erneut verwenden kann. Wenn der Thread beendet wird, wird die Verbindung automatisch geschlossen Da der Threadsicherheitswert von pymysql, MySQLdb usw. 1 ist, ist dies der Fall Die Threads im Modusverbindungspool werden von allen Threads gemeinsam genutzt und sind daher threadsicher. Wenn kein Verbindungspool vorhanden ist und pymysql zum Herstellen einer Verbindung zur Datenbank verwendet wird, gibt es bei Single-Thread-Anwendungen kein Problem. Wenn jedoch Multi-Thread-Anwendungen beteiligt sind, ist eine Sperre erforderlich . Bei vielen Anfragen nimmt die Leistung ab. #3.3 Sperren Überprüfen Sie zu diesem Zeitpunkt den Verbindungsstatus in der Datenbank: Status wie „Threads%“ anzeigen;


4 Der Datenbankverbindungspool wird in Kombination mit pymsql

#🎜🎜 verwendet #
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "shuke"
# Date: 2018/5/13
from DBUtils.PersistentDB import PersistentDB
import pymysql
POOL = PersistentDB(
 creator=pymysql,# 使用链接数据库的模块
 maxusage=None,# 一个链接最多被重复使用的次数,None表示无限制
 setsession=[],# 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."]
 ping=0,
 # ping MySQL服务端,检查是否服务可用。# 如:0 = None = never, 1 = default = whenever it is requested, 2 = when a cursor is created, 4 = when a query is executed, 7 = always
 closeable=False,
 # 如果为False时, conn.close() 实际上被忽略,供下次使用,再线程关闭时,才会自动关闭链接。如果为True时, conn.close()则关闭链接,那么再次调用pool.connection时就会报错,因为已经真的关闭了连接(pool.steady_connection()可以获取一个新的链接)
 threadlocal=None,# 本线程独享值得对象,用于保存链接对象,如果链接对象被重置
 host='127.0.0.1',
 port=3306,
 user='zff',
 password='zff123',
 database='zff',
 charset='utf8',
)
def func():
 conn = POOL.connection(shareable=False)
 cursor = conn.cursor()
 cursor.execute('select * from USER')
 result = cursor.fetchall()
 cursor.close()
 conn.close()
 return result
result = func()
print(result)

PS: Sie können statische Methoden verwenden, um sie zur einfacheren Verwendung in einer Klasse zu kapseln

Das obige ist der detaillierte Inhalt vonZu vollständig! Eine Sammlung von Tutorials zur Verwendung von Python zum Betrieb von MySQL!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen