python操作数据库-自动查询封装

闲来无事,想练习一下python,写了一个方法用来自动查询本机数据库的data

以下是代码---

import pymysql
from pymysql.converters import escape_string
def auto_select():
    while True:
        try:
            db_name = input('请输入你要查询的数据库:')
            table = input('请输入你要查询的表:')
            num = int(input('请输入查询行数:'))
            connect = pymysql.connect(host='localhost',user='root',port=3306,passwd='wyb219483',db=db_name)
            cursor = connect.cursor()
            sql = '''select * from %s ;'''%(escape_string(table))
            cursor.execute(sql)
            results = cursor.fetchmany(num)
            print('--'*10)
            for result in results:
                print(f'查询表{db_name}第{results.index(result)+1}行数据为{result}')
            print('--'*10)
            print(f'查询受影响行数为{cursor.rowcount}行!')
        except pymysql.err.OperationalError:
            print(f'\nError:MySQL中暂无数据库{db_name}')
        except pymysql.err.ProgrammingError:
            print(f'\nError:数据库{db_name}暂无{table}表')
        except ValueError:
            print(f'\nError:查询行数输入类型错误,应为整数型')
        finally:
            cursor.close()
            connect.close()
        select = input("---按下Q/q退出查询!---:")
        if select in('q','Q'):
            break

if __name__ == "__main__":
    auto_select()

唯一需要注意的就是:

sql = '''select * from %s ;'''%(escape_string(table))

1.这里在编写sql时用了字符串转义方法escape_string(),而如果将table封装在args元组参数中,在cursor.execute(sql,args)这样操作的话,pymysql则会报1064字符串引用错误,使用escape_string()则可以避免此种错误... 

2.在编写sql语句时尽量不要去拼接或者format字符串,导致出现sql注入的问题,造成用户信息安全问题...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值