用到的库:PyMySQL

遇到的坑

  • 执行INSERT语句后没反应

pymysql在连接数据库的时候会有一个参数autocommit默认为False,表示执行完SQL语句后是否自动提交到真正的数据库,如果没有设置为True,那么你执行sql过后,是需要显式提交的,即conn.commit()


示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
'''插入单条数据'''
import pymysql
#打开数据库连接,不指定数据库
conn=pymysql.connect('localhost','root','123456')
conn.select_db('pythondb')

cur=conn.cursor()#获取游标

#创建user表
cur.execute('drop table if exists user')
sql="""CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`age` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0"""

cur.execute(sql)

insert=cur.execute("insert into user values(1,'tom',18)")
print('添加语句受影响的行数:',insert)

#另一种插入数据的方式,通过字符串传入值
sql="insert into user values(%s,%s,%s)"
cur.execute(sql,(3,'kongsh',20))

cur.close()
conn.commit()
conn.close()
print('sql执行成功')

获取游标

要想操作数据库,光连接数据是不够的,必须拿到操作数据库的游标,才能进行后续的操作,比如读取数据、添加数据。通过获取到的数据库连接实例conn下的cursor()方法来创建游标。游标用来接收返回结果

1
2
3
4
5
6
import pymysql
#打开数据库连接
conn = pymysql.connect('localhost',user = "root",passwd = "123456",db = "testdb")
#获取游标
cursor=conn.cursor()
print(cursor)

执行sql语句execute和executemany

  • execute(query,args=None)

  • 函数作用:执行单条的sql语句,执行成功后返回受影响的行数

  • 参数说明:
    query:要执行的sql语句,字符串类型
    args:可选的序列或映射,用于query的参数值。如果args为序列,query中必须使用%s做占位符;如果args为映射,query中必须使用%(key)s做占位符

  • executemany(query,args=None)

  • 函数作用:批量执行sql语句,比如批量插入数据,执行成功后返回受影响的行数

  • 参数说明:
    query:要执行的sql语句,字符串类型
    args:嵌套的序列或映射,用于query的参数值

cursor.close()#先关闭游标

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


查找数据库并获取返回值

1
2
3
4
5
6
7
8
9
10
11
12
import pymysql

conn = pymysql.connect('localhost', 'root', 'a8498067', 'wordpress')

cur = conn.cursor()

test = cur.execute(r'''
SELECT id FROM wp_posts WHERE post_title="肖申克的救赎";
''')

print(type(test))

结果如下:
<class 'int'>