Python进阶——使用python操作数据库

一、数据库编程接口

  • 为了对数据库进行统一操作,大多数语言都提供了简单的、标准的数据库接口
  • python database api 2.0中,定义了python数据库api接口的各个部分,如模块接口、连接对象、游标对象、类型对象和构造器、DB API的可选扩展以及可选的错误处理机制等。
1、连接对象
  • 获取连接对象
实现方式:connect()
//返回连接对象,这个对象表示目前和数据库的会话

connect参数说明:
	dsn——数据源名称
	user——用户名
	password——密码
	host——主机名
	database——数据库名称
//参数的使用依据具体情况而定
  • 连接对象的方法
close()		//关闭数据库连接
commit()	//提交事务
rollback()	//回滚事务
cursor()	//获取游标对象,操作数据库
2、游标对象
  • 游标对象代表数据库中的游标,用于指示抓取数据操作的上下文,主要提供执行sql语句,调用存储过程、获取查询结果等方法
获取方法: cursor()

游标对象的属性:
	description——数据库列 类型和值的描述信息,注释
	rowcount——回返结果的行数统计信息
	
游标对象的方法说明:
	callproc()	//调用存储过程,需要数据库支持
	close()		//关闭当前游标
	execute()	//执行sql语句或书库命令
	executemany()	//批量操作
	fetchone()		//获取查询结果集中的下一条记录
	fetchmany()		//获取指定数量的记录
	fetchall()		//获取结果集的所有记录
	nextest()		//跳至下一个可用的结果集
	arraysize()		//指定使用fetchmany()获取的行数
	setinputsiuzes()	//设置在调用execute()方法时分配的内存区域的大小
	setoutputsize()		//设置列缓冲区大小

二、使用sqllite

  • sqLite——嵌入式数据库,它的数据库就是一个文件
  • sqlite将整个数据库,包括定义、表、索引以及数据本身,作为一个单独的、可跨平台使用的文件存储在主机中。
  • python内置了sqlite3
import sqlite3

conn=sqlite3.connect('jrj1.db')  #文件不存在,会自动在当前目录创建

cursor=conn.cursor()    #创建一个游标

#调用游标的方法

cursor.execute('create table user(id int(10) primary key,name varchar(20))') #创建一个数据表

#增
cursor.execute('insert into user (id,name) values('1','python')')  


#删
cursor.execute('delete from user where id=1')

#改
cursor.execute('update user set name=? where id = ?',('python',1))  #使用?作为占位符代替具体数值,使用一个元组来替换?

#查
cursor.execute('select * from user')    #不需要提交,使用?作为占位符代替具体数值,使用一个元组来替换?
result=cursor.fetchone()    #返回的result为一个元组
print(result)               #(1,'python')


cursor.close() #关闭游标

conn.commit()   #提交事务,增删改必须提交事务

conn.close()    #关闭数据库连接

三、使用mysql

1、下载及安装mysql
  • 使用navicat for mysql,桌面版mysql数据库管理和开发工具
2、下载及安装pymysql
3、连接数据库
import pymysql

db=pymysql.connect(
    host='xx.xx.xx.xx',
    port=9906,
    user='---',
    password='---'
    database='---',
    charset='utf8'
)

#参数:主机名或ip,用户名,密码,数据库名称

cursor=db.cursor()

#查询
sql='select * from approve where id=315'

#执行多条语句
sql="""
create table user(
    id int(10) primary key,
    name varchar(20)
);
"""
#使用insert语句插入时,使用%s作为占位符,可以防止sql注入
cursor.execute(sql)
result=cursor.fetchall()
print(result)	

db.close()