数据库与python的结合

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。

1、在python中连接数据库

先在terminal中进入mysql,用命令建立FATE库
# MariaDB [(none)]> CREATE DATABASE FATE;
# Query OK, 1 row affected (0.00 sec)

# ##### 再在python中操作,连接该库
# import pymysql
#
# con = pymysql.connect(host='localhost',
#                       user='root',          #用root用户身份
#                       password='westos',    #密码为westos
#                       db='FATE',            #连接FATE库
#                       charset = 'utf8',     #使语言都能正常显示、无乱码
#                       autocommit='True'     #将执行结果提交
# )

2、创建游标对象

游标对象:cursor就是一个Cursor对象,这个cursor是一个实现了迭代器(def__iter__())和生成器(yield)的MySQLdb对象
# cur = con.cursor()

3、对数据库进行操作

(1)创建表(tables)

# try:
#     create_tables='CREATE TABLE abc (id int,username varchar(20));'		#将想对数据库进行的操作赋值给变量
#     print(cur.execute(create_tables))		#用cur.execute()操作该变量,打印结果,此时打印结果的值为一个数字,意为该操作找了多少条数据库的信息
# except Exception as a:		#若不能成功添加
#     print('创建失败,失败原因:',a)		#打印提示
# else:			#若成功添加
#     print('创建成功')		#打印提示

#### 在python中运行的结果
# #0		#影响了0条数据库的信息
# #创建成功
#### 在数据库中查询到的结果
# # MariaDB [FATE]> SHOW TABLES;	#查看表是否成功建立
# # +----------------+
# # | Tables_in_FATE |
# # +----------------+
# # | abc            |
# # +----------------+
# # 1 row in set (0.00 sec)		#显示表成功建立

(2)插入数据

# try:
#     insert_table="INSERT INTO abc VALUES(3,'user1');"
#     cur.execute(insert_table)
# except Exception as a:
#     print("插入失败,原因为:",a)
# else:
#     #con.commit()       #该行意为将执行的操作提交,与连接数据库时的指令同义,提交前先将程序测试以下,若测试运行成功,再提交比较妥贴.
#     print("插入成功")

#### 在python中运行的结果
# #插入成功

#### 在数据库中查询到的结果
# # MariaDB [FATE]> SELECT * FROM abc;
# # +------+----------+
# # | id   | username |
# # +------+----------+
# # |    3 | user1    |
# # +------+----------+
# # 1 row in set (0.00 sec)	#显示插入信息成功

(3)插入多条数据

# try:
#     info = [(i,i) for i in range (30,40)]
#     ##第一种方式
#     # insert_A="INSERT INTO abc VALUES(%d,'%s');"
#     # for x in info:
#     #     #print(insert_A %x)          #插入前打印测试是否成功
#     #     cur.execute(insert_A %x)     #测试完成后插入
#     ##第二种方式
#     # insert_B="INSERT INTO abc VALUES('%s','%s');"
#     # cur.executemany(insert_B,info)
# except Exception as a:
#     print("插入多条数据失败,原因为:",a)
# else:
#     print("插入多条数据成功")

#### 在python中运行的结果
# #插入多条数据成功

#### 在数据库中查询到的结果
# # MariaDB [FATE]> SELECT * FROM abc;
# # +------+----------+
# # | id   | username |
# # +------+----------+
# # |    3 | user1    |
# # |   10 | 10       |
# # |   11 | 11       |
# # |   12 | 12       |
# # |   13 | 13       |
# # |   14 | 14       |
# # |   15 | 15       |
# # |   16 | 16       |
# # |   17 | 17       |
# # |   18 | 18       |
# # |   19 | 19       |		#可看到,插入多条数据成功

4、数据库的游标指针的操作

# import pymysql
#
# con = pymysql.connect(host='localhost',
#                       user='root',
#                       password='westos',
#                       db='FATE',
#                       charset = 'utf8',
#                       autocommit='True'
# )
# cur = con.cursor()

(1)数据库的查询

# select="SELECT USERNAME FROM abc;"
#
# print(cur.execute(select))
#
# #31     #该值为数据的条数,默认不返回查询结果集,只返回数据记录数
#
# print(cur.fetchone())
#
# #('user1',)         #返回的结果是下一个查询结果集,以元组的格式返回

(2)游标指针的意义

# select = "SELECT * FROM abc;"
# cur.execute(select)
# print(cur.fetchone())     #查看下一个查询结果集
# #(3, 'user1')
# print(cur.fetchone())     #查看下一个查询结果集(此时游标指针移动了一格,所以查询结果不同了)
# #(10, '10')
# print(cur.fetchmany(3))   #查看当前位置的下N个查询结果集,N可任意
# #((11, '11'), (12, '12'), (13, '13'))
# print(cur.fetchall())     #查看当前位置开始的剩下所有的查询结果集
# #((14, '14'), (15, '15'), (16, '16'), (17, '17'), (18, '18'), (19, ....(以下省略)

(3)游标指针的移动

relative模式为将指针移动至相对位置,即在当前位置的基础上进行移动,若为数即是向之前的位置移动,若为数即为向之后的位置移动。
absolute模式为将指针移动至绝对位置,即无视指针当前位置,仅看数字代表的位置在何处,并将指针移动至数字代表的位置。
# 可以通过cursor.scroll(position,mode="relative/absolute")
# select = "SELECT * FROM abc;"
# cur.execute(select)
# print(cur.fetchmany(5))
# print('移动指针ing')
# cur.scroll(0,'absolute')		#以absolute的模式,将指针移动到绝对位置(比如0就是开头)
# print(cur.fetchmany(2))
#
# # ((3, 'user1'), (10, '10'), (11, '11'), (12, '12'), (13, '13'))
# # 移动指针ing
# # ((3, 'user1'), (10, '10'))
#
# cur.scroll(2,'absolute')	#以absolute的模式,将指针移动到2的位置
# print(cur.fetchmany(2))
#
# #((11, '11'), (12, '12'))
#
# cur.scroll(-4,mode='relative')	#以relative的模式,将指针移动到相对位置,相对于原位置的前4个位置
# print(cur.fetchmany(4))
#
# #((3, 'user1'), (10, '10'), (11, '11'), (12, '12'))