mysql - 如何使用python循环创建多个sql表

标签 mysql loops for-loop syntax-error pymysql

所以我正在编写这个程序来转换我拥有的 .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/

相关文章:

php - Loop 没有使用完整的 IP 而只使用第一个数字

java - 简单循环不会在字符串数组上停止

swift - swift中循环遍历数组问题

javascript - Promise.all 返回一个未定义的数组

mysql - 如果我怎样才能加上/减去?

javascript - 如何通过填充从数据库获取的数据来自动在 HTML 表中创建行

c - while 循环内的 If 语句无法执行并退出程序

java - 使用三重嵌套 for 循环来增加打印行的长度和计数

MySQL 分组循环 bash

python - 如何将 Python 连接到 MySQL 数据库...?