Detaillierte Erläuterung der DB-API für die Python-Verbindung zum Datenbanklernen

高洛峰
Freigeben: 2017-02-13 16:21:51
Original
1864 Leute haben es durchsucht

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:

Detaillierte Erläuterung der DB-API für die Python-Verbindung zum Datenbanklernen

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 >

  • db: Der zu verwendende Datenbankname. Keiner. Standardwert.

  • Port: Der vom MySQL-Dienst verwendete TCP-Port

  • Zeichensatz: Datenbankkodierung

Bei der Verbindung mit psycopg2 verfügbare Parameter:


    Datenbankname – Datenbankname (DSN-Verbindungsmodus)
  • Datenbank – Datenbankname
  • Benutzer – Benutzername
  • Passwort – Passwort
  • Host – Serveradresse (wenn die Standardverbindung Unix Socket nicht bereitgestellt wird)
  • Port – Verbindungsport (Standard 5432)

Das Verbindungsobjekt verfügt über die folgenden Methoden:


    close(): Schließen Sie dieses Verbindungsobjekt. Nach dem Schließen können keine weiteren Vorgänge ausgeführt werden, es sei denn, die Verbindung wird erneut erstellt.
  • commit(): Übermitteln Sie die aktuelle Transaktion Die Datenbank unterstützt Transaktionen und nach dem Hinzufügen, Löschen oder Ändern erfolgt kein Commit. Die Datenbank wird standardmäßig zurückgesetzt
  • rollback( ): Brechen Sie die aktuelle Transaktion ab
  • cursor(): Erstellen Sie ein Cursorobjekt

Verwenden Sie den Cursor, um ein Cursorobjekt zu erstellen
Cursorobjekt hat die folgenden Eigenschaften und Methoden:


Gemeinsame Methoden:


    close(): Schließen Sie dieses Cursorobjekt
  • fetchone(): Holen Sie sich die nächste Zeile der Ergebnismenge
  • fetchmany([size = Cursor.arraysize]) : Die nächsten Zeilen der Ergebnismenge abrufen
  • fetchall(): Alle verbleibenden Zeilen der Ergebnismenge abrufen
  • excute(sql [, args]): Eine Datenbankabfrage oder einen Datenbankbefehl ausführen
  • excutemany(sql, args): Mehrere Datenbankabfragen oder -befehle ausführen
Gemeinsame Attribute:


    Verbindung: Erstellen Sie eine Datenbankverbindung für dieses Cursorobjekt
  • Arraygröße: Wie viele Datensätze werden auf einmal mit der fetchmany()-Methode abgerufen, der Standardwert ist 1
  • lastrowid: entspricht PHPs last_inset_id()

Andere Methoden:


    __iter__(): Erstellen Sie ein iterierbares Objekt (optional)
  • next( ): Holen Sie sich die nächste Zeile des Ergebnissatzes (sofern Iteration unterstützt wird)
  • nextset(): Wechseln Sie zum nächsten Ergebnissatz (sofern unterstützt)
  • callproc(func[,args]): Rufen Sie eine gespeicherte Prozedur auf
  • setinputsizes(sizes): Legen Sie den maximalen Eingabewert fest (erforderlich, aber die spezifische Implementierung ist optional )
  • 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
Nach dem Login kopieren

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()
Nach dem Login kopieren

Weitere verwandte Artikel zur DB-API für die Python-Verbindung zum Datenbanklernen finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!