Запись csv-файла в базу данных SQL Server с использованием python

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

cur=cnxn.cursor() # Get the cursor csv_data = csv.reader(file(Samplefile.csv')) # Read the csv for rows in csv_data: # Iterate through csv cur.execute("INSERT INTO MyTable(Col1,Col2,Col3,Col4) VALUES (?,?,?,?)",rows) cnxn.commit() 

Ошибка: pyodbc.DataError: ('22001', '[22001] [Microsoft] [ODBC SQL Server Driver] [SQL Server] Строковые или двоичные данные будут усечены. (8152) (SQLExecDirectW); [01000] [Microsoft] [ ODBC SQL Server Driver] [SQL Server] Оператор завершен. (3621) ')

  • Почему csvwriter.writerow () помещает запятую после каждого символа?
  • Как подсчитать 10 самых распространенных значений в dict в python
  • Чтение csv с колонкой timestamp с пандами
  • читать определенную строку в файле csv, python
  • Удаление столбцов в CSV с помощью python
  • Как перебрать определенный диапазон строк с помощью Python csv reader?
  • Однако, когда я вставляю значения вручную. Он отлично работает

     cur.execute("INSERT INTO MyTable(Col1,Col2,Col3,Col4) VALUES (?,?,?,?)",'A','B','C','D') 

    Я убедился, что ТАБЛИЦА существует в базе данных, типы данных соответствуют данным, которые я передаю. Соединение и курсор также верны. Тип данных строк – «список»,

  • CSV new-line символ, отображаемый в некотируемой ошибке поля
  • Самый эффективный способ синтаксического анализа большого .csv в python?
  • python csv unicode 'ascii' codec не может кодировать символ u '\ xf6' в позиции 1: порядковый номер не в диапазоне (128)
  • Как фильтровать из CSV-файла с помощью скрипта Python
  • Подключение к MS SQL Server с использованием python в Linux с помощью «учетных данных Windows»
  • ValueError: операция ввода-вывода в закрытом файле
  • 3 Solutions collect form web for “Запись csv-файла в базу данных SQL Server с использованием python”

    Подумайте о построении запроса динамически, чтобы убедиться, что количество заполнителей соответствует вашей таблице и формату файла CSV. Тогда просто вопрос обеспечения правильности таблицы и CSV-файла, а не проверки того, что вы набрали достаточно ? заполнители в вашем коде.

    Следующий пример предполагает

    1. CSV-файл содержит имена столбцов в первой строке
    2. Соединение уже построено
    3. Имя файла – test.csv
    4. Имя таблицы – MyTable
    5. Python 3
     ... with open ('test.csv', 'r') as f: reader = csv.reader(f) columns = next(reader) query = 'insert into MyTable({0}) values ({1})' query = query.format(','.join(columns), ','.join('?' * len(columns))) cursor = connection.cursor() for data in reader: cursor.execute(query, data) cursor.commit() 

    Если имена столбцов не включены в файл:

     ... with open ('test.csv', 'r') as f: reader = csv.reader(f) data = next(reader) query = 'insert into dbo.Test values ({0})' query = query.format(','.join('?' * len(data))) cursor = connection.cursor() cursor.execute(query, data) for data in reader: cursor.execute(query, data) cursor.commit() 

    Пробовали ли вы передавать столбцы в качестве аргументов, например

     for rows in csv_data: # Iterate through csv cur.execute("INSERT INTO MyTable(Col1,Col2,Col3,Col4) VALUES (?,?,?,?)", *rows) 

    Спасибо всем, я разобрался. Ошибка была вызвана ограничением ограничения размера таблицы. Он изменил емкость столбца, например, от col1 varchar (10) до col1 varchar (35) и т. Д. Теперь он работает отлично.

    @beargle: Мне очень понравился ваш способ программирования

    Python - лучший язык программирования в мире.