python-mysql数据库编程
1. pymysql完成数据查询
import pymysql
# 创建和数据库服务器的连接
conn = pymysql.connect(host='localhost', port=3306, user='root', password='pwd',
database='db_name', charset='utf8')
# 获取游标
cursor = conn.cursor()
# 执行SQL语句 返回值就是SQL语句在执行过程中影响的行数
sql = """select * from table_name;"""
row_count = cursor.execute(sql)
print("SQL语句执行影响的行数%d" % row_count)
# 取出结果集中一行 返回的结果是一行
# print(cursor.fetchone())
# 取出结果集中的所有数据 返回 ((一行数据),(),())
for line in cursor.fetchall():
print(line)
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
2. pymysql完成对数据库的增删改
import pymysql
conn=pymysql.connect(host='127.0.0.1',port=3306,user='root',password='pwd',
database='db_name', charset='utf8')
# 通过连接获取游标
cursor = conn.cursor()
# sql = "delete from table_name where id = 5;"
# sql = insert into table_name (name) values ('西部大坏蛋孙悟空');
sql = "update table_name set kongfuid=444 where id = 4;"
row_count = cursor.execute(sql)
print("SQL语句执行影响的行数%d" % row_count)
# 提交修改 因为pymysql 模块默认是启用事务的 你的sql语句 如果不提交 相当于没有执行
conn.commit()
# 回滚数据到什么都不做的状态 即撤销刚刚的修改
# conn.rollback()
# 关闭游标和连接
cursor.close()
conn.close()
3.1 参数化列表防止SQL注入
SQL注入 产生原因: 后台将用户提交的带有恶意的数据和SQL进行字符串方式的拼接,从而影响了SQL语句的语义,最终产生数据泄露的现象。
如果防止: sql语句的参数化, 将SQL语句的所有数据参数存在一个列表中传递给execute函数的第二个参数
from pymysql import connect
def main():
find_name = input("请输入物品名称:")
# 创建Connection连接
conn=connect(host='localhost',port=3306,user='root',password='pwd',
database='dn_name',charset='utf8')
# 获得Cursor对象
cs = conn.cursor()
# 非安全的方式
# 输入 " or 1=1 or " (双引号也要输入)
# sql = 'select * from tb_name where name="%s"' % find_name
# print("""sql===>%s<====""" % sql)
# 执行select语句,并返回受影响的行数:查询所有数据
# count = cs.execute(sql)
# 安全的方式
# 构造参数列表
params = [find_name]
# 执行select语句,并返回受影响的行数:查询所有数据
count = cs.execute('select * from tb_name where name=%s', params)
# 注意:
# 如果要是有多个参数,需要进行参数化
# 那么params = [数值1, 数值2....],此时sql语句中有多个%s即可
# 打印受影响的行数
print(count)
# 获取查询的结果
# result = cs1.fetchone()
result = cs1.fetchall()
# 打印查询的结果
print(result)
# 关闭Cursor对象
cs.close()
# 关闭Connection对象
conn.close()
if __name__ == '__main__':
main()

被折叠的 条评论
为什么被折叠?



