闲来无事,想练习一下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注入的问题,造成用户信息安全问题...