「Python」连接数据库的三种方式


「Python」连接数据库的三种方式

文章插图
 
连接SQLite要操作关系数据库,首先需要连接到数据库,一个数据库连接称为Connection;
连接到数据库后,需要打开游标,称之为Cursor,通过Cursor执行SQL语句,然后,获得执行结果 。
Python定义了一套操作数据库的API接口,任何数据库要连接到Python,只需要提供符合Python标准的数据库驱动即可 。
由于SQLite的驱动内置在Python标准库中,可以直接来操作SQLite数据库 。
# 导入SQLite驱动:import sqlite3# 连接到SQLite数据库# 数据库文件是test.db# 如果文件不存在,会自动在当前目录创建:conn = sqlite3.connect('test.db')# 创建一个Cursor:cursor = conn.cursor()# 执行一条SQL语句,创建user表:cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')# 继续执行一条SQL语句,插入一条记录:cursor.execute('insert into user (id, name) values ("1", "vigilr")')# 通过rowcount获得插入的行数:count=cursor.rowcount# 关闭Cursor:cursor.close()# 提交事务:conn.commit()# 关闭Connection:conn.close()查询数据库数据
conn = sqlite3.connect('test.db')cursor = conn.cursor()# 执行查询语句:cursor.execute('select * from user where id=?',('1',))# 获得查询结果集:values = cursor.fetchall()cursor.close()conn.close()使用Python的DB-API时,只要搞清楚`Connection`和`Cursor`对象,打开后一定记得关闭,就可以放心地使用 。
使用`Cursor`对象执行`insert`,`update`,`delete`语句时,执行结果由`rowcount`返回影响的行数,就可以拿到执行结果 。
使用`Cursor`对象执行`select`语句时,通过`featchall()`可以拿到结果集 。结果集是一个`list`,每个元素都是一个`tuple`,对应一行记录 。
如果SQL语句带有参数,那么需要把参数按照位置传递给`execute()`方法,有几个?占位符就必须对应几个参数,例如:
cursor.execute('select * from user where name=? and pwd=?', ('abc', 'password'))# -*- coding: utf-8 -*-import sqlite3# 初始数据:conn = sqlite3.connect('test1.db')cursor = conn.cursor()cursor.execute('create table user(id varchar(20) primary key, name varchar(20), score int)')cursor.execute(r"insert into user values ('A-001', 'Adam', 95)")cursor.execute(r"insert into user values ('A-002', 'Bart', 62)")cursor.execute(r"insert into user values ('A-003', 'Lisa', 78)")cursor.close()conn.commit()conn.close()def get_score_in(low, high):'''返回指定分数区间的名字,按分数从低到高排序'''conn = sqlite3.connect('test1.db')cursor = conn.cursor()cursor.execute('select name from user where score>=? and score<=? ORDER BY score',(low,high))temp=cursor.fetchall()result=[]for t in temp:for i in t:result.Append(i)cursor.close()conn.close()return result# 测试:assert get_score_in(80, 95) == ['Adam'], get_score_in(80, 95)assert get_score_in(60, 80) == ['Bart', 'Lisa'], get_score_in(60, 80)assert get_score_in(60, 100) == ['Bart', 'Lisa', 'Adam'], get_score_in(60, 100)print('Pass')连接MySQL安装MySQL驱动
由于MySQL服务器以独立的进程运行,并通过网络对外服务,所以,需要支持Python的MySQL驱动来连接到MySQL服务器 。
MySQL官方提供了‘mysql-connector-python’驱动,但是安装的时候需要给pip命令加上参数‘--allow-external’:
pip install mysql-connector-python --allow-external mysql-connector-python如果上面的命令安装失败,可以试试另一个驱动:
‘pip install mysql-connector’
除了使用`mysql.connector`还可以使用`pymysql`
# 导入pymysql模块import pymysql# 连接databaseconn = pymysql.connect(host="127.0.0.1",port=3308,user="root",password="123456",database="test",charset="utf8")cursor = conn.cursor()# 创建user表:cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')cursor.close()conn.close()# 连接databaseconn = pymysql.connect(host="127.0.0.1",port=3308,user="root",password="123456",database="test",charset="utf8")cursor = conn.cursor()# 插入一行记录,注意MySQL的占位符是%s:cursor.execute('insert into user (id, name) values (%s, %s)', ['1', 'wasd'])cursor.execute('insert into user (id, name) values (%s, %s)', ['2', 'zxc'])print('受影响行数:',cursor.rowcount)# 提交事务:conn.commit()cursor.close()conn.close()


推荐阅读