Поэтому я пишу эту программу, которая преобразует 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()
Приоритет оператора приводит к тому, что ваша смесь %
и .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)
Кроме того, имена таблиц и столбцов должны быть обратными, а не одиночными кавычками.
%
и.format()
?