Pymysql

  1. Pymsql
    1. 安装
    2. 连接数据库
    3. 查询数据库
    4. 参数传递
    5. 事务操作

Pymsql

安装

pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple

连接数据库

from pymysql import Connection, connect

connect = None

try:
    connect = Connection(
        host='localhost',
        port=3306,
        user='root',
        password='root',
    )

    print("连接mysql成功")

except Exception as e:
    print(e)
finally:
    if connect is not None:
        connect.close()

使用游标执行语句

from pymysql import Connection, connect

connect = None

try:
    connect = Connection(
        host='localhost',
        port=3306,
        user='root',
        password='root',
        database='web_test', #指定要操作的数据库
    )

    #选择要操作的数据库
    connect.select_db('web_test')

    #获取游标对象
    cursor = connect.cursor()

    #cursor.execute(数据库操作语句)

except Exception as e:
    print(e)
finally:
    if connect is not None:
        connect.close()

选择操作的数据库可以在创建Connection对象时指定,也可以通过select_db方法指定

查询数据库

游标

#获取游标对象
cursor = connect.cursor()

cursor.execute('select * from user')

#获取查询所有结果
result = cursor.fetchall()

#遍历结果
for row in result:
    print(row)

游标方法

fetchall 查询所有结果

fetchon 查询当前位置下一行

scroll 游标移动,mode参数: “absolute” 绝对位置移动,”relative”相对位置移动

fetchmany 获取指定数量的结果

from pymysql import Connection, connect

connect = None

try:
    connect = Connection(
        host='localhost',
        port=3306,
        user='root',
        password='root',
        database='web_test', #指定要操作的数据库
    )

    #选择要操作的数据库
    connect.select_db('web_test')

    #获取游标对象
    cursor = connect.cursor()

    #未执行时rowcount = -1
    print(cursor.rowcount)

    cursor.execute('select * from user')

    # rowcount = 8
    print(cursor.rowcount)

    #查询多个
    #res = cursor.fetchmany(cursor.rowcount)

    cursor.scroll(0, mode='absolute')  # 相对绝对位置移动
    print(cursor.fetchone()) #查询当前行的下一行
    cursor.scroll(1, mode='relative')  # 相对当前位置移动
    print(cursor.fetchone()) #查询当前行的下一行



except Exception as e:
    print(e)
finally:
    if connect is not None:
        connect.close()

参数传递

#获取游标对象
cursor = connect.cursor()

cursor.execute("select * from user where username like %s",('%jack%'))

res = cursor.fetchall()

for re in res:
    print(re)

通常查询条件我们使用元组传递,使用%s占位符传递值,这样子可以防止sql注入问题

SQL注入代码示范

username = "'' OR '1'='1'"

cursor.execute(f"select * from user where username like {username}")

这是一段危险代码会导致SQL注入,使得查询出所有用户信息

更新操作

#获取游标对象
cursor = connect.cursor()

sql = "update user set username = %s where uid = %s"

# 执行SQL语句
cursor.execute(sql,( "user0001",10))

%s作为通用占位符,会自动转换数据类型

事务操作

删除操作

# 使用cursor()方法获取操作游标 
cursor = db.cursor()
 
# SQL 删除语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 提交修改
   connect.commit()
except:
   # 发生错误时回滚
   connect.rollback()
 
# 关闭连接
connect.close()

以删除操作为例,如果发生异常自动回滚


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 1300452403@qq.com

文章标题:Pymysql

字数:707

本文作者:Os467

发布时间:2024-12-04, 15:50:03

最后更新:2024-12-04, 15:51:00

原始链接:https://os467.github.io/2024/12/04/pymysql/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

×

喜欢就点赞,疼爱就打赏