Как создать несколько таблиц SQL в цикле с Python

0

Поэтому я пишу эту программу, которая преобразует CSV файлы, которые у меня есть, и в свою очередь экспортирует преобразованные файлы в базу данных. Все CSV файлы имеют одинаковые столбцы, и я пытаюсь создать несколько таблиц с помощью цикла, и я получаю эту ошибку.

pymysql.err.ProgrammingError: (1064, "У вас есть ошибка в синтаксисе SQL, проверьте руководство, соответствующее версии сервера MariaDB, для правильного синтаксиса для использования рядом с '' '(\n
{} int,\n 'в строке 1 ")

КОД:

country_index = input ('Код страны:')

def database_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()
  • 0
    Почему вы смешиваете % и .format() ?
  • 1
    Имя таблицы не должно быть в одинарных кавычках. См. Stackoverflow.com/questions/11321491/…
Показать ещё 6 комментариев
Теги:
for-loop
loops
syntax-error
pymysql

1 ответ

0

Приоритет оператора приводит к тому, что ваша смесь % и .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)

Кроме того, имена таблиц и столбцов должны быть обратными, а не одиночными кавычками.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню