Вставьте данные CSV в MSSQL, используя python, где заголовки col содержат дефис - PullRequest
0 голосов
/ 29 марта 2019

Используя код, найденный на этом сайте , мы можем загрузить данные из CSV в MSSQL, где заголовки столбца = имя или имя_первой. Однако, если заголовок col содержит дефис, такой как имя-имя, произойдет сбой.

Часть кода:

with open(yourcsv) as csvfile:
       csvFile = csv.reader(csvfile, delimiter=',')
       header = next(csvFile)
       headers = map((lambda x: x.strip()), header)
       insert = 'INSERT INTO {} ('.format(table) + ', '.join(headers) + ') VALUES '
       for row in csvFile:
           values = map((lambda x: "'"+x.strip()+"'"), row)
           cursor.execute(insert +'('+ ', '.join(values) +');')
           conn.commit() #must commit unless your sql database auto-commits

Ошибка = cursor.execute (insert + '(' + ',' .join (values) + ');') pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft] [Драйвер ODBC SQL Server] [SQL Server] Неверный синтаксис рядом с '-'. (102) (SQLExecDirectW)")

Нам нужно иметь возможность использовать файлы, которые могут содержать дефис в имени столбца.

1 Ответ

1 голос
/ 29 марта 2019

Этот трудно читаемый фрагмент кода можно исправить, используя квадратные скобки для окружения имен столбцов:

insert = 'INSERT INTO {} ('.format(table) + '[' + '], ['.join(headers) + ']) VALUES '

Подробнее: Какая польза от квадратных скобок [] в выражениях sql?

Скобки требуются, если вы используете ключевые слова или специальные символы в имена столбцов или идентификаторы. Вы можете назвать столбец [First Name] (с пробелом) - но тогда вам нужно будет использовать скобки каждый раз, когда вы ссылается на этот столбец.

...