一、pymysql模块:其实就是提供了socket客户端和mysql服务端的通信接口
1、发起连接
# conn=pymysql.connect(
# host='127.0.0.1', #也就是服务端地址
# port=3306, #端口号就是3306
# user='root', #用户名
# password='', #用户名对应的密码
# database='day45',
# charset='utf8'
# )
#就相当于cmd中登录mysql
2、拿到游标:
》》cur=conn.cursor() #拿到游标cur
》》游标就是cmd中的mysql>节点,用来执行mysql命令的
这里的cur指的是游标。游标是映射在结果集中一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一行数据了,将游标放置到某行后,即可对该行数据进行操作。然而这些都是mysql内部的事情了,我们只需要知道要写上这么两句话,在执行sql语句前实例化一个游标对象,并在执行完sql语句提交后,关掉这个游标就好了。
3、增删改操作:
(1)字符串表示mysql语句增加记录,注意要加分号的
》》使用字符串变量表示mysql语句:insert_sql='insert into userinfo(user,password) values("%s","%s");' %('yh','123')
》》可以直接cur.execute('mysql语句')去执行
》》通常采用调用excute函数将命令发给mysql:cur.execute(insert_sql)
》》》》》》》》》注意此时mysql并不会立刻执行命令
(2)下面这种方法占位符不用加引号,execute函数会帮我们处理,注意是元组的形式
》》insert_sql='insert into userinfo(user,password) values(%s,%s);'
》》cur.execute(insert_sql,('evia1','1234')) 元组形式
(3)这种方法就是一次性添加多条记录,注意是列表形式,列表中是元组
》》cur.executemany(insert_sql,[('evia2','1234'),('evia3','1234'),('evia4','1234')])
# 原来是我们对sql进行字符串拼接
# sql="select * from userinfo where name='%s' and password='%s'" %(user,pwd)
# print(sql)
# res=cursor.execute(sql)
#改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了)
sql="select * from userinfo where name=%s and password=%s" #!!!注意%s需要去掉引号,因为pymysql会自动为我们加上
res=cursor.execute(sql,[user,pwd]) #pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。
4、查询操作
(1)同样也是调用excute函数执行,一定要注意mysql是不会立刻执行这条语句的
》》rows=cur.execute('select * from userinfo where 1 = 2;')
(2)拿到的rows是查询记录结果的个数,所以是数字,并不是mysql中显示出的结果,增删改操作也是一样的
》》rows=cur.execute('select * from userinfo;')
5.执行命令
》》要想在mysql执行上面输入的mysql语句,必须调用commit函数
con.commit()mysql就会执行发送过来的命令
6、查看结果:结果都是以元组的形式返回的
》》cur.fetchone() 执行一次取第一个结果,再次输入cur.fetchone()后又会拿到第二个结果,和生成器的next方法类似
》》cur.fetchall() 一次取出所有的结果,默认是以元组输出的
》》cur.fetchmany(2)取前2条结果
7、关闭
》》执行完整个流程后,要把游标和连接关闭
》》cur.close()
》》con.close()
import pymysql
#链接
conn=pymysql.connect(host='localhost',user='root',password='123',database='egon')
#游标
cursor=conn.cursor()
#执行sql语句
#part1
# sql='insert into userinfo(name,password) values("root","123456");'
# res=cursor.execute(sql) #执行sql语句,返回sql影响成功的行数
# print(res)
#part2
# sql='insert into userinfo(name,password) values(%s,%s);'
# res=cursor.execute(sql,("root","123456")) #执行sql语句,返回sql影响成功的行数
# print(res)
#part3
sql='insert into userinfo(name,password) values(%s,%s);'
res=cursor.executemany(sql,[("root","123456"),("lhf","12356"),("eee","156")]) #执行sql语句,返回sql影响成功的行数
print(res)
conn.commit() #提交后才发现表中插入记录成功
cursor.close()
conn.close()
import pymysql
#链接
conn=pymysql.connect(host='localhost',user='root',password='123',database='egon')
#游标
cursor=conn.cursor()
#执行sql语句
sql='select * from userinfo;'
rows=cursor.execute(sql) #执行sql语句,返回sql影响成功的行数rows,将结果放入一个集合,等待被查询
# cursor.scroll(3,mode='absolute') # 相对绝对位置移动
# cursor.scroll(3,mode='relative') # 相对当前位置移动
res1=cursor.fetchone()
res2=cursor.fetchone()
res3=cursor.fetchone()
res4=cursor.fetchmany(2)
res5=cursor.fetchall()
print(res1)
print(res2)
print(res3)
print(res4)
print(res5)
print('%s rows in set (0.00 sec)' %rows)
conn.commit() #提交后才发现表中插入记录成功
cursor.close()
conn.close()
'''
(1, 'root', '123456')
(2, 'root', '123456')
(3, 'root', '123456')
((4, 'root', '123456'), (5, 'root', '123456'))
((6, 'root', '123456'), (7, 'lhf', '12356'), (8, 'eee', '156'))
rows in set (0.00 sec)
'''