所以我正在编写这个程序来转换我拥有的 .csv 文件,并将转换后的文件导出到数据库。 .csv 文件都具有相同的列,我尝试使用循环创建多个表,但收到此错误。
pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '''(\n
{} int,\n ' at line 1")
代码:
country_index = input('国家/地区代码:')
defdatabase_uploader():
conn = pymysql.connect(host='localhost',
user='test_user',
password='',
db='%s'%country_index)
cur = conn.cursor()
path = r'C:\Users\Robin\Desktop\usa_indicator'
filenames = glob.glob(path + '/*.csv')
dfs = []
for files in filenames:
f = open(files)
fString = f.read()
fName = files[37:2]
for lines in fString.split('\n'):
dfs.append(lines.split(','))
DATE = dfs[0][1]; REALTIME_START = dfs[0][2]; VALUE = dfs[0][3]
queryCreateTable = """CREATE TABLE '%s'(
{} int,
{} int,
{} int
)"""%fName.format(DATE, REALTIME_START, VALUE)
cur.execute(queryCreateTable)
conn.close()
最佳答案
运算符优先级导致 %
和 .format()
的混合工作方式与您预期的不同。 .
的优先级高于 %
,因此它的执行就像您编写的一样。
queryCreateTable = """CREATE TABLE '%s'(
{} int,
{} int,
{} int
)"""%(fName.format(DATE, REALTIME_START, VALUE))
您需要添加括号来覆盖此解析:
queryCreateTable = ("""CREATE TABLE '%s'(
{} int,
{} int,
{} int
)"""%fName).format(DATE, REALTIME_START, VALUE)
或者您可以只使用单个格式化运算符:
queryCreateTable = """CREATE TABLE `{}`(
`{}` int,
`{}` int,
`{}` int
)""".format(fName, DATE, REALTIME_START, VALUE)
此外,表名和列名应使用反引号,而不是单引号。
关于mysql - 如何使用python循环创建多个sql表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52394445/