python操作数据库

通过pymysql模块连接

一、连接对象:

1、获取连接对象:

获取连接对象主要通过connect()函数,此函数有多个参数,具体使用哪个参数, 要看使用的数据库类型。connect()函数常用参数和说明如下:

参数说明
dsn表示数据源名称
user用户名
password用户密码
host主机名
database数据库名称

示例代码如下:

conn = pymysql.connect(host="localhost",user="user",password="passwd",db="database",charset="utf-8")

2、连接对象的方法:

connect()函数返回连接对象,这个对象表示目前和数据库的会话,连接对象支持的方法如下:

方法说明
close()关闭数据库连接
commit()提交事务
rollback()回滚事务
cursor()获取游标,操作数据库

二、游标对象:

游标对象代表数据库中游标,用于指示抓取数据操作的上下文,主要提供执行SQL语句、调用存储过程,获取查询结果等方法。

通过使用连接对象的cursor()方法可以获取游标对象,游标对象的属性如下:

  1. description:数据库列类型和值的描述信息。
  2. rowcount:返回结果的行数统计信息,如select、update等。

游标对象的方法如下:

方法说明
callproc(procname,parameter)调用存储过程,需要数据库支持
close()关闭当前游标
execute(operation,parameter)执行数据库操作,sql语句或数据库命令
fetchone()获取查询结果集中的下一条记录
fetchmany(size)获取指定数量的记录
fetchall()获取结果集的所有记录
nextset()跳至下一个可用的结果集
arraysize指定使用fetchmany()获取的行数,默认为1
setinputsizes(sizes)设置在调用execute()方法时分配的内存大小
setoutputisizes(sizes)设置缓冲区大小,对大数据列(LONGS)有用
executemany()用于批量操作,如批量更新

三、连接mysql数据库:(mysql安装方法省略)

连接MySQL需要支持Python的mysql驱动来进行连接,在此选用PyMysql数据库模块来连接MySQL,安装PyMySQL可直接使用pip安装即可,如下:

pip3 install PyMySQL

1、例如:通过pymysql模块连接数据库,编辑mysql.py模块,如图:

执行结果如下:

2、创建数据表:

例如:修改上述的mysql.py模块,通过预处理语句创建表,如图:

3、操作数据表:

例如:向表中插入单条数据,先将表中内容清空,再插入数据,通过try来捕获异常,如图:

插入多条数据,使用executemany()方法,如图:

通过MySQL官方驱动连接

mysql-connector是MySQL官方提供的驱动器,使用的时候直接使用pip安装即可,如图:

安装后在终端界面导入不报错,说明已经安装成功,如图:

连接mysql主要需要四部分信息:

  • 运行MySQL的机器信息
  • 连接MySQL的用户名
  • 连接MySQL的用户密码
  • 需要连接的MySQL的库名

1、定义连接属性,如下:

  • host:MySQL服务所在的主机
  • user:连接MySQL的用户名
  • password:连接MySQL的密码
  • database:要连接的库

2、导入MySQL驱动,如下:

3、建立与服务器的连接,如下:

conn = mysql.connector.connect(**db_config)

注意:db_config前面有个**,这个的含义不是指针,Python中没有指针概念,**的含义是使用一个变量提供了一个参数字典,connect会把这个参数字典展开为4个单独的参数,然后使用这些参数来连接MySQL

4、打开一个游标,如下:

cursor = conn.cursor()

要想向数据库发送命令已经从数据库接收返回结果,需要创建一个游标,创建游标只需要调用cursor()方法即可

5、执行SQL查询,如下:

一般建议使用三引号来包含要发给MySQL的命令,因为三引号可以换行,如果语句过长可以换行,然后赋值给一个变量_sql(这个变量不一定非要以下划线开头,只是可以建议这么写)

执行cursor.execute(_sql)将要执行的命令发送给MySQL

使用一下三个游标方法可以获取请求结果,如下:

  • cursor.fetchone:获取一行的结果
  • cursor.fetchmancy:获取指定的任意行结果
  • cursor.fetchall:获取全部结果,返回的是一个参数为元组的列表,可使用for循环遍历

6、提交缓存数据以及关闭游标和连接,执行命令如下:

conn.commit()
cursoe.close()
conn.close()

不在需要连接的时候就可以关闭游标和连接,否则会过度消耗服务器资源,conn.commit()不是一定要写,如果我们向数据库中插入数据,此时数据并没有真正的插入的数据库中,而是在缓存里,如果此时查询数据可能会出现查询不到的情况,如果要想插入后立即就能查询到,那么只能强制将缓存数据写入数据库中,此时就需要调用conn.commit(),不过此命令会稍微耗费性能,如果不太在乎性能并且需要即可查询数据,就用此命令即可

下面例子表示向MySQL中插入数据,如图:

上图中的插入语句中并没有用硬编码的字符串插入,而是使用格式化占位符%s,这样更灵活,然后在execute中插入数据,execute这个函数只能接收两个参数,第一个参数为要执行的命令,第二个参数就是要插入的数据,这里将数据全部放在一个元组中,这样即可实现顺利插入,如图:

标签