python连接数据库操作

一,python连接数据库并执行查询语句

"""连接数据库并查询数据"""
# 1,导入pymysql包
import pymysql
if __name__ == '__main__':
    # 2,创建连接对象
    # connect = Connection = Connect本质上一个函数,使用这三个都可以创建数据库连接对象
    # 1,host:服务器的主机地址
    # 2,port:mysql数据库的端口号
    # 3,user:用户名
    # 4,password:密码
    # 5,database:操作的数据库
    # 6,charset:操作数据库使用的编码格式
    conn = pymysql.connect(host = "localhost",
                           port = 3306,
                           user = "root",
                           password = "2018713",
                           database = "test1",
                           charset = "utf8")
    # 3,获取游标,目的是通过游标执行sql语句
    cursor = conn.cursor()
    # 4,准备sql语句
    sql = "select * from student;"
    # 5,执行sql语句
    cursor.execute(sql)
    # 6,获取查询的结果,返回的是一个元组
    rows = cursor.fetchall()
    for row in rows:
        print(row)
    # print(row)
    # 7,关闭游标
    cursor.close()
    # 8,关闭数据库连接
    conn.close()

二,连接数据库并执行增加/修改/删除语句

"""连接数据库并执行增加删除修改语句"""
# 1,导入pymysql包
import pymysql
if __name__ == '__main__':
    # 2,创建连接对象
    # connect = Connection = Connect本质上一个函数,使用这三个都可以创建数据库连接对象
    # 1,host:服务器的主机地址
    # 2,port:mysql数据库的端口号
    # 3,user:用户名
    # 4,password:密码
    # 5,database:操作的数据库
    # 6,charset:操作数据库使用的编码格式
    conn = pymysql.connect(host = "localhost",
                           port = 3306,
                           user = "root",
                           password = "2018713",
                           database = "test1",
                           charset = "utf8")
    # 3,获取游标,目的是通过游标执行sql语句
    cursor = conn.cursor()
    # 对数据库进行增删改操作,执行sql语句后需要把修改的数据提交到数据库
    # 4,准备sql语句--添加数据
    sql = "insert into class(name) values('python42'); "
    # sql = "update class set name = 'python45' where id = 1;" #修改语句
    # sql = "delete from class where id = 3;" # 删除语句
    try:
        # 5,执行sql语句
        cursor.execute(sql)
        # 提交修改的数据到数据库
        conn.commit()
    except Exception as e:
        # 对修改的数据进行撤销,回滚到修改前的状态
        conn.rollback()
    finally:
        # print(row)
        # 7,关闭游标
        cursor.close()
        # 8,关闭数据库连接
        conn.close()

三,防止aql注入

(1)sql注入:用户提交带有恶意的数据与sql语句进行字符串方式的拼接,从而影响sql语句的语义,最终产生数据泄露的现象

如:示例:sql = “select * from student where name = ‘%s’;” % “黄蓉’or 1 = 1 or ‘ ‘’

(2)防止sql注入的方法---sql语句参数化;sql语句中的参数使用%s占位(此处不是python字符串的格式化操作);

(3)具体实现:将sql语句中%s占位所需要的参数存在一个列表中,把参数列表传递给excute方法中的第二个参数

(4)示例代码:

"""防止SQL注入"""
# 1,导入pymysql包
import pymysql
if __name__ == '__main__':
    # 2,创建连接对象
    # connect = Connection = Connect本质上一个函数,使用这三个都可以创建数据库连接对象
    # 1,host:服务器的主机地址
    # 2,port:mysql数据库的端口号
    # 3,user:用户名
    # 4,password:密码
    # 5,database:操作的数据库
    # 6,charset:操作数据库使用的编码格式
    conn = pymysql.connect(host="localhost",
                           port=3306,
                           user="root",
                           password="2018713",
                           database="test1",
                           charset="utf8")
    # 3,获取游标,目的是通过游标执行sql语句
    cursor = conn.cursor()
    # 对数据库进行增删改操作,执行sql语句后需要把修改的数据提交到数据库
    # 4,准备sql语句--查询语句 ---导致SQL注入
    # sql = "select * from class where name = '%s';" % "python41' or 1 = 1 or '"
    # 准备sql语句,防止SQL注入的语句,%s是sql语句的参数,不加引号
    sql = "select * from class where name = %s;"
    # 5,执行sql语句
    cursor.execute(sql,("python41",))
    row = cursor.fetchall()
    print(row)
    # 7,关闭游标
    cursor.close()
    # 8,关闭数据库连接
    conn.close()

四,防止sql注入--插入多个参数数据

"""防止SQL注入,插入多个参数数据"""
# 1,导入pymysql包
import pymysql
if __name__ == '__main__':
    # 2,创建连接对象
    # connect = Connection = Connect本质上一个函数,使用这三个都可以创建数据库连接对象
    # 1,host:服务器的主机地址
    # 2,port:mysql数据库的端口号
    # 3,user:用户名
    # 4,password:密码
    # 5,database:操作的数据库
    # 6,charset:操作数据库使用的编码格式
    conn = pymysql.connect(host = "localhost",
                           port = 3306,
                           user = "root",
                           password = "2018713",
                           database = "test1",
                           charset = "utf8")
    # 3,获取游标,目的是通过游标执行sql语句
    cursor = conn.cursor()
    # 对数据库进行增删改操作,执行sql语句后需要把修改的数据提交到数据库
    # 4,准备sql语句--插入多个参数数据
    sql = "insert into class(name,age,gender,c_id) values(%s,%s,%s,%s)"
    try:
        # 5,执行sql语句,执行SQL语句的传入的参数,参数类型可以是元组,列表,字典
        cursor.execute(sql,["曹操",77,'',3]);
        # 提交修改的数据到数据库
        conn.commit()
    except Exception as e:
        # 对修改的数据进行撤销,回滚到修改前的状态
        conn.rollback()
    finally:
        # print(row)
        # 7,关闭游标
        cursor.close()
        # 8,关闭数据库连接
        conn.close()

 

posted @ 2021-03-08 09:50  念~  阅读(597)  评论(0)    收藏  举报