• Day42 python连接数据库基础


    一,python连接数据库基本语法:

    #在pyhon程序中连接数据库执行sql语句 -->pymysql模块
    #连接数据库,得到一个链接
    import pymysql
    conn = pymysql.connect(
        host = 'localhost',
        port = 3306,
        user = 'root',
        password = '123',
        database = 'db',
        charset = 'utf8'  #不带-
    )
    
    #获取光标对象
    cursor = conn.cursor()
    
    #得到光标语句
    sql = "select * from userinfo where username='%s' and password='%s';" % (user,pwd);
    
    #使用光标对象执行sql语句
    ret = cursor.execute(sql)
    
    #得到结果
    print(ret)   #返回受影响行数
    
    #关闭光标
    cursor.close()
    
    #关闭连接
    conn.close()

    二,SQL注入相关

      Q1.什么是sql注入?

        用户输入的内容有恶意的sql语句,后端拿到用户输入的内容不做检测直接做字符串拼接,得到一个和预期不一起的语句

      Q2.如何解决sql注入?

        对用户输入的内容做检测

        pymysql内置了这种检测,我们只需要让pymysql帮我们拼接mysql语句

        例:cursor.execute(sql,[name,pwd]) :让pymysql模块帮我们拼接sql语句,执行sql语句

    三,SQL的增删改操作

    # mysql增
    cursor = conn.cursor()
    sql = "insert into userinfo(username, password) values (%s,%s);"
    ret = cursor.execute(sql,['Eva','456'])
    conn.commit()  # 针对连接提交书务,涉及操作数据库的,一定要提交
    cursor.close()
    conn.close()
    
    # mysql删
    cursor = conn.cursor()
    sql = "delete from userinfo where username=%s;"
    ret = cursor.execute(sql,['alex'])
    conn.commit()  # 针对连接提交书务,涉及操作数据库的,一定要提交
    cursor.close()
    conn.close()
    
    # mysql改
    cursor = conn.cursor()
    sql = "update userinfo set password=%s where username=%s;"
    ret = cursor.execute(sql,['999','boss_jin'])
    conn.commit()  # 针对连接提交书务,涉及操作数据库的,一定要提交
    cursor.close()
    conn.close()

    四,SQL的查操作

    # 1.返回的数据类型
        # 1.默认返回的都是用元组表示的
        # 2.返回字典类型的数据
            cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    
    # 2.常用方法
        # 1.fetchone
            # 查询单条,多次执行现象类似生成器
        # 2.fetchall
            # 查询全部
        #进阶方法fetmany(3)
            #查询指定数量的数据
    
    # 3.回滚操作
        conn.roll()  
    
    
    #例1:返回元组
    cursor = conn.cursor()
    sql = "select * from userinfo"
    cursor.execute(sql)
    ret = cursor.fetchall()
    print(ret)
    cursor.close()
    conn.close()
    
    #例2:返回字典
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    sql = "select * from userinfo"
    cursor.execute(sql)
    ret = cursor.fetchall()
    print(ret)
    cursor.close()
    conn.close()
    
    #例3:回滚操作
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    sql = "insert into userinfo (username, password) values (%s,%s)"
    try:
        cursor.execute(sql,['alex','alexsb'])
        cursor.lastrowid() # 获取插入值的id
        conn.commit()
    except Exception as e:
        conn.rollback()  #若操作数据库过程中发生错误,则回滚操作
        cursor.close()
        conn.close()

    五,进阶用法

    # 光标按绝对位置移动1
    cursor.scroll(1, mode="absolute")
    # 光标按照相对位置(当前位置)移动1
    cursor.scroll(1, mode="relative")
  • 相关阅读:
    RabbitMq
    SAAS-HEM
    java框架
    数据结构
    JVM
    springboot高级
    面试题汇总
    vue
    bootforum
    SpringBoot
  • 原文地址:https://www.cnblogs.com/lianyeah/p/9754640.html
Copyright © 2020-2023  润新知