pymysql用法
Posted 大道至诚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pymysql用法相关的知识,希望对你有一定的参考价值。
pymysql用法
一、基础用法
-
导入:import pymysql
-
连接数据库:conn=pymysql.connect(host="",user="",password="",database="")
-
创建游标:cur=conn.cursor()
- 括号内没有任何设置:查询后输出的结果是元组形式
- 括号内添加cursor=pymysql.cursors.DictCursor:数据的结果是字典形式的,字典中的key是字段名,value是查询到的对应值
-
使用pymysql进行查询:cur.execute("mysql语句")
注意:查询语句必须添加双引号,查询语句和mysql的语句一样,没有区别
-
获取查询到的数据
-
获取一条数据
- ret_one = cur.fetchone()
- print(ret_one)
可以使用循环连续获取数据
-
获取多条数据
- ret_many = cur.fetchmany(num)
- print(ret_many)
num是指定的获取数据条数
-
获取全部的数据
- ret_all = cur.fetchall()
- print(ret_all)
-
-
为了避免语句执行中存在错误导致出现程序异常,需要做异常处理pymysql.err.ProgrammingError,as e后可以把e打印出来显示异常的具体内容
try: 程序 except pymysql.err.ProgrammingError as e: print(e)
-
关闭游标:cur.close()
-
关闭数据库连接:conn.close()
import pymysql conn=pymysql.connect(host="127.0.0.1",user="root", password="930215", database="department_data") # 创建cursor游标 cur = conn.cursor(cursor=pymysql.cursors.DictCursor) try: cur.execute("select * from employee") # cur.execute获取到的查询结果并不能直接显示出来,必须另外获取,这个用法类似于 # 生成器的用法 # cur.fetchone()只能获取一条数据 ret_one = cur.fetchone() print(ret_one) # cur.fetchmany(num)指定获取的数据个数 ret_many = cur.fetchmany(3) print(ret_many) # cur.fetchall()获取所有的查询数据 ret_all = cur.fetchall() print(ret_all) except pymysql.err.ProgrammingError as e: print(e) cur.close() conn.close()
-
写入、更新和删除数据数据
- 写入数据
cur.execute("insert into 表名(字段) values(插入数据);") - 更新数据
cur.execute("update 表名 set 字段=‘‘ where 字段=‘‘") - 删除数据
cur.execute("delete from 表名 where 字段=‘‘")
conn.commit() - 异常处理:如果写入数据不成功,执行回滚:rollback()
‘‘‘插入数据‘‘‘ try: cur.execute("insert into employee(ename,eage,depart_id,etime) values(‘夏侯淳‘,25,103,now())") conn.commit() except Exception as e: print(e) conn,rollback()
- 写入数据
注意:如果只是写了插入的语句,那么就只是把数据写入到内存中,并没有写入磁盘,必须使用conn.commit()进行提交,是conn不是cur这点也需要特别注意
-
在execute中也可以进行数据表的创建和删除任务
-
查询一共有多少行数据被影响:print(cur.rowcount)
-
在执行sql语句后可以使用cur.rowcount来获取总共有几行数据被影响,然后通过循环获取每一个数据
cur.execute("select * from employee") for i in range(cur.rowcount): ret = cur.fetchone() print(ret)
二、防止sql注入
- 导入pymysql:import pymysql
- 提示用户输入内容
- 创建连接:conn=pymysql.connect(host=‘‘,user=‘‘,password=‘‘,database=‘‘)
- 创建游标:cur = conn.cursor()
- 拼接sql语句:sql = "select * from 表 where user=%s and password=%s"
注意:这里的拼接语句中的字符串后不要直接写拼接的内容,要把拼接的内容放在执行语句中,如果直接拼接的会可能造成sql注入问题,威胁到数据库的安全,这里必须要特别注意。
-
执行语句:cur.execute(sql,(拼接内容1,拼接内容2))
-
获取查询的内容
-
关闭游标:cur.close()
-
关闭连接:conn.close()
import pymysql username = input("mysql用户名:") password = input("mysql密码:") conn = pymysql.connect(host="localhost", user="root", password="930215", database="department_data") cur = conn.cursor() sql = "select * from userinfo where username=%s and password=%s" # 这里不能直接拼接 cur.execute(sql,(username,password)) # 执行语句这里拼接,并且是括号,拼接内容和sql内容要使用逗号隔开 ret = cur.fetchone() print(ret) cur.close() conn.close()
以上是关于pymysql用法的主要内容,如果未能解决你的问题,请参考以下文章