pymysql语法_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()

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用pymysql执行SQL语句时,如果字符串中包含引号,需要进行转义处理,否则会导致SQL语句语法错误或SQL注入攻击。下面介绍两种常见的引号转义处理方法: 1. 使用pymysql.escape_string()函数 pymysql.escape_string()函数可以将字符串中的特殊字符进行转义,包括引号、反斜杠等。示例代码如下: ```python import pymysql # 连接数据库 conn = pymysql.connect(host='localhost', user='root', password='123456', db='test') # 创建游标 cursor = conn.cursor() # 定义要插入的数据 name = 'Tom' age = 20 remark = 'He said, "I\'m fine."' # 对remark字段进行转义处理 remark = pymysql.escape_string(remark) # 执行插入语句 sql = "INSERT INTO users (name, age, remark) VALUES ('%s', '%d', '%s')" % (name, age, remark) cursor.execute(sql) # 提交事务 conn.commit() # 关闭游标和连接 cursor.close() conn.close() ``` 在上面的代码中,使用`pymysql.escape_string()`函数将`remark`字段中的双引号进行了转义处理,转义后的结果为`He said, \"I\'m fine.\"`,这样就可以避免插入语句中的引号导致语法错误。 2. 使用占位符 使用占位符的方法可以避免手动进行引号转义处理,使代码更加简洁和安全。示例代码如下: ```python import pymysql # 连接数据库 conn = pymysql.connect(host='localhost', user='root', password='123456', db='test') # 创建游标 cursor = conn.cursor() # 定义要插入的数据 name = 'Tom' age = 20 remark = 'He said, "I\'m fine."' # 执行插入语句 sql = "INSERT INTO users (name, age, remark) VALUES (%s, %s, %s)" params = (name, age, remark) cursor.execute(sql, params) # 提交事务 conn.commit() # 关闭游标和连接 cursor.close() conn.close() ``` 在上面的代码中,使用了占位符`%s`来代替插入语句中的字符串,然后使用`cursor.execute()`函数的第二个参数`params`来传递参数,由pymysql自动进行转义处理。这样就可以避免手动进行引号转义处理,提高了代码的可读性和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值