美文网首页
py3笔记24:pymysql数据库操作

py3笔记24:pymysql数据库操作

作者: _百草_ | 来源:发表于2022-10-02 10:08 被阅读0次

PyMySQL 用于连接MySQL服务器的一个库(py2中使用mysqldb)


1、安装PyMySQL

pip install pymysql


2、连接数据库

  • 导入pymysql
    import pymysql
  • 连接数据库
    前提:数据库服务端已启动
# 打开数据库连接
db = pymysql.connect(
        user=None,   # 用户名
        password="", # 密码
        host=None, # 服务端地址
        database=None, # 数据库
        port=0,  # 服务端口号
        charset="utf8", # 设置数据库编码
        cursorclass=Cursor, # 自定义游标对象
        autocommit=False  # 是否直接提交数据,默认否
    )

# 创建游标对象
cursor = db.cursor()

# 关闭数据库连接
db.close()

connect()参数:

  • user: 数据库登陆名,默认是当前用户
  • password:数据库登录密码,默认为空
  • host:数据库主机,默认是用本地本机
  • database:要使用的数据库名,无默认值;
    注意:以免项目中涉及多数据库,该值一般放置在sql语句中,而非连接数据库时设置
  • port :MySQL服务使用TCP端口。默认是3306
  • charset :数据库编码。常用编码方式utf8
  • cursorclass :自定义游标对象。设置pymysql.cursors.DictCursor
    或者创建cursor对象时,传参cursor = db.cursor(pymysql.cursors.DictCursor)
    设置为字典形式返回数据(默认元组)。

3、执行sql语句

# SQL语句
sql = """CREATE TABLE stu(
        sid INT NOT NULL AUTO_INCREMENT, 
        name CHAR(20) NOT NULL, 
        pwd CHAR(20), 
        PRIMARY KEY(id)
        );"""

# 执行SQL语句
cursor.execute(sql)

4、数据提交或错误回滚

连接对象db,提供了对事务操作的支持

  • commit()提交数据(游标的所有更新操作)
  • rollback() 发生错误后回滚(当前游标的所有操作)
sql2 = "INSERT INTO stu(sid,name) VALUES(1, '百草');"  # 插入数据
sql3 = "UPDATE stu SET name = 'wlh' WHERE id = 1;"  # 修改数据
sql4 = "DELETE FROM stu WHERE name = 'wlh';"  # 删除数据
try:
    cursor.execute(sql2)  # 执行语句
    db.commit()  # 执行无误后,提交;才会真正修改到数据库
except Exception as e:
    print(f"数据操作{sql}失败:{e}")
    db.rollback()  # 发生错误回滚

或者数据库连接时,修改autocommit = True,则无需db.commit()


5、查询数据

  • fetchone():获取单条数据(获取下一个结果集。结果是一个对象)
  • fetchall():获取多条数据
  • rowcount:只读属性。返回执行execute()方法后影响的行数
# -----------start:查询数据-----------------
sql5 = "SELECT * FROM stu;"  # 查询数据
cursor.execute(sql5)  # 执行SQL

# 获取数据
data1 = cursor.fetchone()  # 获取单条数据
print(data1)  # 返回数据类型是字典;{'ID': 2, 'NAME': 'LinWoW'}
# 返回数据类型是元组;(2, ‘LinWoW’)
data2 = cursor.fetchall()  # 获取所有数据
print(data2)  # [{'ID': 2, 'NAME': 'LinWoW'},{'ID': 3, 'NAME': 'wlh'}]
# -----------end:查询数据-------------------
  • scroll()类似文件操作中的seek(),第一个参数表示偏移量,第二个参数表示偏移的起始位置
# 绝对移动,参照开始的位置
cursor.scroll(1,'absolute')

# 相对移动,参照当前光标的位置
cursor.scroll(1,'relative')

5.1 查询优化?

避免SQL注入,前往不要手动拼接(关键参数)查询条件

username = input('username>>>:')
password = input('password>>>:')
sql = "select * from stu  where name=%s and password=%s"
res = cursor.execute(sql,(username,password))   利用方法实现字符的自动拼接

if res:
    print('输入正确!')
else:
    print('用户名或密码错误!')
cone.close()
'''
username>>>:LinWoW
password>>>:mysql
输入正确!
username>>>:"qwwqw" or 1=1 --
password>>>:
用户名或密码错误!
'''

相关文章

网友评论

      本文标题:py3笔记24:pymysql数据库操作

      本文链接:https://www.haomeiwen.com/subject/vcyjartx.html