PyMySQL模块

介绍

  pymysql属于第三方模块

下载

  1、命令行下载

    pip3 insatll pymysql 

    pip3 install pymysql -i 源地址

  2、借助pycharm

   3、python解释器配置文件

模块的基本使用

import pymysql


# 创建链接
conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    database='db_5',
    charset='utf8'
)
# 生成一个游标对象
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 让数据自动组织成字典
# 定义SQL语句
sql = 'select * from userinfo'
# 执行SQL语句
cursor.execute(sql)
# 获取返回结果
res = cursor.fetchall()
print(res)

  1、execute

    execute返回值是执行SQL语句之后受影响的行数

  2、fetchall()获取所有的结果 数据,展示形式是列表套字典

    fetchone()获取结果集第一个结果,展示的形式是字典

    fetchmany()括号内可以指定获取几个结果集,展示的形式是列表套字典

  3、光标移动(scroll)

    relative  相对当前位置移动

    absolute   相对数据开头位置移动

 sql注入问题

  1、sql注入问题的产生

    就是通过一些特殊符号的组合,达到某些特定的效果从而避免常规的逻辑

  2、sql注入问题的解决

    execute方法自动帮你解决

import pymysql

# 创建链接
conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    database='db_5',
    charset='utf8'
)
# 生成一个游标对象
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 让数据自动组织成字典
# 获取用户名和密码
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# 构造SQL语句
# sql = "select * from userinfo where name='%s' and password='%s'"%(username,password)
# 针对核心数据 不要自己拼接 交由execute方法帮你筛选再拼接
sql = "select * from userinfo where name=%s and password=%s"
print(sql)
# 执行SQL语句
cursor.execute(sql,(username,password))
res = cursor.fetchall()
if res:
    print(res)
    print('登录成功')
else:
    print('用户名或密码错误')

功能补充

  用python代码执行数据库增删改查操作时,只能执行查的功能,执行其他功能需要二次确认才可生效(conn.commit())

# cursor.execute(sql2,('jackson',666))
# conn.commit()
# cursor.execute(sql3)
# conn.commit()
# cursor.execute(sql4)
# conn.commit()

  解决这种问题只需要在创建链接的时候添加额外的配置参数即可

   一次性添加多数据(executemany)

cursor.executemany(sql2,[('jason111',123),('jason222',321),('jason333',222)])

  主动关闭链接,释放资源

conn.close()

注册登录

def register(cursor):
    # 获取用户名和密码
    username = input('username>>>:').strip()
    password = input('password>>>:').strip()
    # 验证用户名是否已存在
    sql = 'select * from userinfo where name=%s'
    cursor.execute(sql, (username,))
    res = cursor.fetchall()
    if not res:
        sql1 = 'insert into userinfo(name,password) values(%s,%s)'
        cursor.execute(sql1, (username, password))
        print('用户:%s注册成功' % username)
    else:
        print('用户名已存在')


def login(cursor):
    # 获取用户名和密码
    username = input('username>>>:').strip()
    password = input('password>>>:').strip()
    # 先获取是否存在用户名相关的数据
    sql = 'select * from userinfo where name=%s'
    cursor.execute(sql, (username,))
    res = cursor.fetchall()
    if res:
        # 校验密码
        real_dict = res[0]
        if password == str(real_dict.get('password')):
            print('登录成功')
        else:
            print('密码错误')
    else:
        print('用户名不存在')


def get_conn():
    import pymysql
    # 创建链接
    conn = pymysql.connect(
        host='127.0.0.1',
        port=3306,
        user='root',
        password='123',
        database='db_5',
        charset='utf8',
        autocommit=True  # 涉及到增删改 自动二次确认
    )
    # 生成一个游标对象
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 让数据自动组织成字典
    return cursor


func_dic = {'1': register, '2': login}
while True:
    print("""
    1.注册功能
    2.登录功能
    """)
    cursor = get_conn()
    choice = input('请输入功能编号>>>:').strip()
    if choice in func_dic:
        func_name = func_dic.get(choice)
        func_name(cursor)
    else:
        print('暂时没有当前功能编号')

 

posted @ 2022-02-22 22:34  那就凑个整吧  阅读(555)  评论(0编辑  收藏  举报