用到的库:PyMySQL
遇到的坑
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()
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'>