python - 在python中添加动态表名
问题描述
在给定的查询中,我试图将表名作为用户的输入:
import MySQLdb
import csv
conn=MySQLdb.connect("localhost","root","","graphdata")
c=conn.cursor()
a= raw_input("Enter the table name")
sql='''SELECT distinct sku FROM %s_management'''
c.execute(sql,str(a))
rows=c.fetchall()
file=open('mine.csv','a+')
for eachRow in rows:
print eachRow
a=eachRow
file.write(str(a)+"\n")
file.close()
我想要的是编译器应该作为
Enter table name:
我应该输入表名
Enter table name: inventory
它应该在查询中连接起来:
sql='''SELECT distinct sku FROM inventory_management'''
但到目前为止,我收到了这些错误:
c.execute(sql,str(a))
File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 198, in execute
query = query % args
TypeError: not all arguments converted during string formatting
File "change.py", line 7, in <module>
sql='''SELECT distinct sku FROM %s'''(a)
TypeError: 'str' object is not callable
c.execute("SELECT distinct sku FROM %s_management")(a)
File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 219, in execute
self.errorhandler(self, exc, value)
File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 38, in defau
lterrorhandler
raise errorvalue
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax
; check the manual that corresponds to your MySQL server version for the right s
yntax to use near '%s_management' at line 1")
解决方案
我不推荐这样做,因为它带来了安全问题,但你可以这样做 -
c.execute(sql % str(a))
或者在 python 中使用任何其他类型的字符串格式化程序来更改表名。
推荐阅读
- javascript - Pushstate 添加新参数,如何防止这种情况?
- r - 如何对R中的数据进行分组?
- python - 如何优化for循环
- javascript - 如何在 android 中的 MHTML 文件上应用 javaScript 函数?
- adb - 如何在运行 IOT 的 Rasp pi3 上设置静态 ip?
- java - 编写此代码后应用程序崩溃。错误在哪里?
- php - 请求的媒体类型无效
- sql - 如何使列不为空,但在第一次创建时它确实需要为空
- linux - 我的 Azure WebApp for linux 上的 Linux 风格和版本
- optaplanner - Optaplanner 计划变量不可为空,但仍分配给 null