一,安装:
在python3中,自带pip3,所以可以直接使用pip3去安装所需的模块:
pip3 install pymysql
二,连接
import pymysql
connection = pymysql.connect(host='localhost',
user='root',
password='',
database='test',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor) # 数据以字典方式返回
with connection:
with connection.cursor() as cursor:
sql = 'insert into `users` (`email`,`password`) values (%s, %s)'
cursor.execute(sql, ('123@qq.com', '123'))
connection.commit()
with connection.cursor() as cursor:
sql = 'select * from `users` where `email` = %s'
cursor.execute(sql, ('123@qq.com',))
res = cursor.fetchmany(3) # 查询指定条数
print(res)
三,同时插入多条数据:
import pymysql
config={
"host":"localhost",
"user":"root",
"password":"",
"database":"test"
}
db = pymysql.connect(**config)
cursor = db.cursor()
sql = "INSERT INTO users(username,passwd) VALUES(%s,%s)"
cursor.executemany(sql,[("ali","123"),("pdd",'321')])
db.commit() #提交数据
cursor.close()
db.close()
四:execute 与 executemany返回的都是受影响的行数
sql = "delete from users where username=%s"
res = cursor.executemany(sql,("ali",))
print("res=",res)
#运行结果
res= 1
五:当表中有自增的主键的时候,可以使用lastrowid来获取最后一次自增的ID:
import pymysql
config={
"host":"localhost",
"user":"root",
"password":"",
"database":"test"
}
db = pymysql.connect(**config)
cursor = db.cursor()
sql = "INSERT INTO userinfo(username,passwd) VALUES(%s,%s)"
cursor.execute(sql,("ali","123"))
print("the last rowid is ",cursor.lastrowid)
db.commit() #提交数据
cursor.close()
db.close()
#运行结果
the last rowid is 10
六:数据库查询操作:
fetchone():获取下一行数据,第一次为首行; fetchall():获取所有行数据源 fetchmany(4):获取下4行数据
默认情况下,我们获取到的返回值是元组,只能看到每行的数据,却不知道每一列代表的是什么,这个时候可以使用以下方式来返回字典,每一行的数据都会生成一个字典:
cursor = db.cursor(cursor=pymysql.cursors.DictCursor) # 可以在实例化cursor类的时候,将属性cursor设置为pymysql.cursors.DictCursor,也可以在连接时设置
七:在获取行数据的时候,可以理解开始的时候,有一个行指针指着第一行的上方,获取一行,它就向下移动一行,所以当行指针到最后一行的时候,就不能再获取到行的内容,所以我们可以使用如下方法来移动行指针:
cursor.scroll(1,mode='relative') # 相对当前位置移动
cursor.scroll(2,mode='absolute') # 相对绝对位置移动
第一个值为移动的行数,整数为向下移动,负数为向上移动,mode指定了是相对当前位置移动,还是相对于首行移动
sql = "SELECT * FROM users"
cursor.execute(sql)
res = cursor.fetchall()
print(res)
cursor.scroll(0,mode='absolute') #相对首行移动了0,就是把行指针移动到了首行,否则因为指针的移动此第二次fetchall已获取不到内容
res = cursor.fetchall() #第二次获取到的内容
print(res)