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()
浙公网安备 33010602011771号