Heim > Artikel > Backend-Entwicklung > Detaillierte Erläuterung der DB-API für die Python-Verbindung zum Datenbanklernen
Vor der Python DB-API waren die Anwendungsschnittstellen zwischen Datenbanken sehr verwirrend und die Implementierungen waren unterschiedlich. Wenn das Projekt die Datenbank ersetzen muss, sind viele Änderungen erforderlich, was sehr unpraktisch ist. Das Aufkommen der Python DB-API soll solche Probleme lösen. In diesem Artikel werden hauptsächlich die relevanten Informationen der DB-API für Python vorgestellt, um eine Verbindung zur Datenbank herzustellen. Freunde, die sie benötigen, können darauf zurückgreifen.
Vorwort
Jeder weiß das, wenn man eine Verbindung zu einer Datenbank in Python herstellen möchte, sei es MySQL, SQL Server, PostgreSQL oder SQLite , verwenden Cursor werden immer verwendet, daher müssen Sie die Python-DB-API erlernen.
Alle Python-Datenbankschnittstellenprogramme entsprechen bis zu einem gewissen Grad der Python DB-API-Spezifikation. DB-API definiert eine Reihe notwendiger Objekte und Datenbankzugriffsmethoden, um konsistente Zugriffsschnittstellen für verschiedene zugrunde liegende Datenbanksysteme und verschiedene Datenbankschnittstellenprogramme bereitzustellen. Da die DB-API eine konsistente Zugriffsschnittstelle für verschiedene Datenbanken bereitstellt, wird die Portierung von Code zwischen verschiedenen Datenbanken zu einer einfachen Aufgabe.
Python-Verbindungsdatenbankprozess:
Erstellt mit connect Verbindung
Die Connect-Methode generiert ein Connect-Objekt, über das wir auf die Datenbank zugreifen. Module, die dem Standard entsprechen, implementieren die Verbindungsmethode.
Die Parameter der Verbindungsfunktion lauten wie folgt:
Benutzer Benutzername
Passwort Passwort
Host-Hostname
Datenbank Datenbankname
DSN-Datenquellenname
Datenbankverbindungsparameter können in Form einer DSN-Zeichenfolge bereitgestellt werden, Beispiel: connect(dsn='host:MYDB',user='root',password='')
Natürlich können verschiedene Datenbankschnittstellenprogramme einige Unterschiede aufweisen, und nicht alle werden strikt gemäß den Spezifikationen implementiert. Beispielsweise verwendet MySQLdb den db-Parameter anstelle des in der Spezifikation empfohlenen Datenbankparameters, um die zu seinde Datenbank anzugeben Zugriff:
Bei der Verbindung mit MySQLdb verfügbare Parameter
Host: Datenbank-Hostname. Der Standardwert ist der lokale Host
Benutzer: Datenbank-Anmeldename. Der Standardwert ist der aktuelle Benutzer
Passwort: Das Geheimnis der Datenbankanmeldung. Der Standardwert ist leer >
Verwenden Sie den Cursor, um ein Cursorobjekt zu erstellen
Cursorobjekt hat die folgenden Eigenschaften und Methoden:
setoutputsizes(sizes[,col]): Legen Sie die maximale Puffergröße für den Abruf großer Spalten fest
Andere Attribute:
Beschreibung: Gibt den Cursoraktivitätsstatus zurück (Tupel mit 7 Elementen): (Name, Typcode, Anzeigegröße, interne_Größe, Präzision, Skalierung, null_ok) nur Name und Typ_cose erforderlich
rowcount: die Anzahl der Zeilen, die von der letztenexecute() erstellt oder betroffen wurden
messages: die von der Datenbank nach dem zurückgegebenen Informationen Cursor wird ausgeführt Tupel (optional)
Zeilennummer: Der Index der Zeile, in der sich der Cursor im aktuellen Ergebnissatz befindet (die Startzeilennummer ist 0)
Fehlerdefinition nur in DB-API
Hierarchische Beziehung der Fehlerklassen:
StandardError |__Warning |__Error |__InterfaceError |__DatabaseError |__DataError |__OperationalError |__IntegrityError |__InternalError |__ProgrammingError |__NotSupportedError
Beispiel für einen Datenbankbetrieb
Der Code lautet wie folgt:
#! /usr/bin/env python # -*- coding: utf-8 -*- # ************************************************************* # Filename @ operatemysql.py # Author @ Huoty # Create date @ 2015-08-16 10:44:34 # Description @ # ************************************************************* import MySQLdb # Script starts from here # 连接数据库 db_conn = MySQLdb.connect(host = 'localhost', user= 'root', passwd = '123456') # 如果已经创建了数据库,可以直接用如下方式连接数据库 #db_conn = MySQLdb.connect(host = "localhost", user = "root",passwd = "123456", db = "testdb") """ connect方法常用参数: host: 数据库主机名.默认是用本地主机 user: 数据库登陆名.默认是当前用户 passwd: 数据库登陆的秘密.默认为空 db: 要使用的数据库名.没有默认值 port: MySQL服务使用的TCP端口.默认是3306 charset: 数据库编码 """ # 获取操作游标 cursor = db_conn.cursor() # 使用 execute 方法执行SQL语句 cursor.execute("SELECT VERSION()") # 使用 fetchone 方法获取一条数据库。 dbversion = cursor.fetchone() print "Database version : %s " % dbversion # 创建数据库 cursor.execute("create database if not exists dbtest") # 选择要操作的数据库 db_conn.select_db('dbtest'); # 创建数据表SQL语句 sql = """CREATE TABLE if not exists employee( first_name CHAR(20) NOT NULL, last_name CHAR(20), age INT, sex CHAR(1), income FLOAT )""" try: cursor.execute(sql) except Exception, e: # Exception 是所有异常的基类,这里表示捕获所有的异常 print "Error to create table:", e # 插入数据 sql = """INSERT INTO employee(first_name, last_name, age, sex, income) VALUES ('%s', '%s', %d, '%s', %d)""" # Sex: Male男, Female女 employees = ( {"first_name": "Mac", "last_name": "Mohan", "age": 20, "sex": "M", "income": 2000}, {"first_name": "Wei", "last_name": "Zhu", "age": 24, "sex": "M", "income": 7500}, {"first_name": "Huoty", "last_name": "Kong", "age": 24, "sex": "M", "income": 8000}, {"first_name": "Esenich", "last_name": "Lu", "age": 22, "sex": "F", "income": 3500}, {"first_name": "Xmin", "last_name": "Yun", "age": 31, "sex": "F", "income": 9500}, {"first_name": "Yxia", "last_name": "Fun", "age": 23, "sex": "M", "income": 3500} ) try: # 清空表中数据 cursor.execute("delete from employee") # 执行 sql 插入语句 for employee in employees: cursor.execute(sql % (employee["first_name"], \ employee["last_name"], \ employee["age"], \ employee["sex"], \ employee["income"])) # 提交到数据库执行 db_conn.commit() # 对于支持事务的数据库, 在Python数据库编程中, # 当游标建立之时,就自动开始了一个隐形的数据库事务。 # 用 commit 方法能够提交事物 except Exception, e: # Rollback in case there is any error print "Error to insert data:", e #b_conn.rollback() print "Insert rowcount:", cursor.rowcount # rowcount 是一个只读属性,并返回执行execute(方法后影响的行数。) # 数据库查询操作: # fetchone() 得到结果集的下一行 # fetchmany([size=cursor.arraysize]) 得到结果集的下几行 # fetchall() 返回结果集中剩下的所有行 try: # 执行 SQL cursor.execute("select * from employee") # 获取一行记录 rs = cursor.fetchone() print rs # 获取余下记录中的 2 行记录 rs = cursor.fetchmany(2) print rs # 获取剩下的所有记录 ars = cursor.fetchall() for rs in ars: print rs # 可以用 fetchall 获得所有记录,然后再遍历 except Exception, e: print "Error to select:", e # 数据库更新操作 sql = "UPDATE employee SET age = age + 1 WHERE sex = '%c'" % ('M') try: # 执行SQL语句 cursor.execute(sql) # 提交到数据库执行 db_conn.commit() cursor.execute("select * from employee") ars = cursor.fetchall() print "After update: ------" for rs in ars: print rs except Exception, e: # 发生错误时回滚 print "Error to update:", e db.rollback() # 关闭数据库连接 db_conn.close()
Weitere verwandte Artikel zur DB-API für die Python-Verbindung zum Datenbanklernen finden Sie auf der chinesischen PHP-Website!