Maison >développement back-end >Tutoriel Python >Explication détaillée de la connexion DB-API pour Python à l'apprentissage de la base de données
Avant l'API DB-Python, les interfaces d'application entre les bases de données étaient très déroutantes et les implémentations étaient différentes. Si le projet doit remplacer la base de données, cela nécessitera de nombreuses modifications, ce qui est très gênant. L'émergence de Python DB-API vise à résoudre de tels problèmes. Cet article présente principalement les informations pertinentes de DB-API pour Python pour se connecter à la base de données. Les amis dans le besoin peuvent s'y référer.
Préface
Tout le monde sait que si vous souhaitez vous connecter à une base de données en Python, que ce soit MySQL, SQL Server, PostgreSQL ou SQLite , utilisez Les curseurs sont toujours utilisés, vous devez donc apprendre Python DB-API.
Tous les programmes d'interface de base de données Python sont conformes dans une certaine mesure à la spécification Python DB-API. DB-API définit une série d'objets et de méthodes d'accès aux bases de données nécessaires pour fournir des interfaces d'accès cohérentes pour divers systèmes de bases de données sous-jacents et divers programmes d'interface de bases de données. Étant donné que DB-API fournit une interface d'accès cohérente pour différentes bases de données, le portage du code entre différentes bases de données devient une tâche facile.
Processus de base de données de connexion Python :
Créé à l'aide de Connect connection
La méthode connect génère un objet connect via lequel nous accédons à la base de données. Les modules conformes à la norme implémenteront la méthode connect.
Les paramètres de la fonction de connexion sont les suivants :
user Nom d'utilisateur
mot de passe Mot de passe
nom d'hôte de l'hôte
nom de la base de données
dsn Nom de la source de données
Les paramètres de connexion à la base de données peuvent être fournis sous la forme d'une chaîne DSN, exemple : connect(dsn='host:MYDB',user='root',password=' ')
Bien entendu, les différents programmes d'interface de base de données peuvent présenter certaines différences, et tous ne sont pas implémentés strictement conformément aux spécifications. Par exemple, MySQLdb utilise le paramètre db au lieu du paramètre de base de données recommandé par la spécification pour indiquer la base de données à utiliser. accédé :
Paramètres disponibles lors de la connexion à MySQLdb
hôte : nom d'hôte de la base de données. La valeur par défaut est l'hôte local.
utilisateur : nom de connexion à la base de données. La valeur par défaut est l'utilisateur actuel
mot de passe : le secret de connexion à la base de données. >
Utiliser le curseur pour créer un objet curseur
L'objet curseur a les propriétés et méthodes suivantes :
setoutputsizes(sizes[,col]) : définit la taille maximale du tampon pour la récupération de grandes colonnes
Autres attributs :
description : Renvoie l'état d'activité du curseur (tuple contenant 7 éléments) : (name, type_code, display_size, internal_size, précision, scale, null_ok) seul name et type_cose sont requis
rowcount : le nombre de lignes créées ou affectées par le dernier exécution()
messages : les informations renvoyées par la base de données après le le curseur est exécuté Tuple (facultatif)
rownumber : L'index de la ligne où se trouve le curseur dans l'ensemble de résultats actuel (le numéro de la ligne de départ est 0)
Définition des erreurs dans DB-API uniquement
Relation hiérarchique des classes d'erreurs :
StandardError |__Warning |__Error |__InterfaceError |__DatabaseError |__DataError |__OperationalError |__IntegrityError |__InternalError |__ProgrammingError |__NotSupportedError
Exemple d'opération de base de données
Le code est le suivant :
#! /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()
Pour plus d'articles connexes sur DB-API pour la connexion Python à l'apprentissage de bases de données, veuillez faire attention au site Web PHP chinois !