Python: вставка нескольких значений в таблицу из Excel

Мне нужно прочитать данные из Excel и вставить их в таблицу...

Для этого я использую модули Python 2.7, pymssql и xlrd...

Мое sql-соединение работает нормально, и я также могу правильно читать данные из Excel.

Моя структура таблицы:

CREATE TABLE MONTHLY_BUDGET
(
    SEQUENCE            INT IDENTITY,
    TRANSACTION_DATE    VARCHAR(100),
    TRANSACTION_REMARKS VARCHAR(1000),
    WITHDRAWL_AMOUNT    VARCHAR(100),
    DEPOSIT_AMOUNT      VARCHAR(100),
    BALANCE_AMOUNT      VARCHAR(100)
)

Мои значения excel такие:

02/01/2015  To RD Ac no 147825000874    7,000.00    -   36,575.74

У меня проблема при вставке нескольких значений в таблицу... Я не знаю, как это сделать...

import xlrd
import pymssql

file_location = 'C:/Users/praveen/Downloads/OpTransactionHistory03-01-2015.xls'

#Connecting SQL Server
conn = pymssql.connect (host='host',user='user',password='pwd',database='Practice')
cur = conn.cursor()

# Open Workbook
workbook = xlrd.open_workbook(file_location)

# Open Worksheet
sheet = workbook.sheet_by_index(0)

for rows in range(13,sheet.nrows):
    for cols in range(sheet.ncols):
        cur.execute(
        " INSERT INTO MONTHLY_BUDGET VALUES (%s, %s, %s, %s, %s)", <--- Not sure!!!
        [(sheet.cell_value(rows,cols))])

conn.commit()

Ошибка: ValueError: 'params' arg() может быть только кортежем или словарем.

Документы находятся здесь: http://pymssql.org/en/stable/pymssql_examples.html


person Praveenks    schedule 04.01.2015    source источник


Ответы (1)


Исключение, которое вы получаете, говорит, что «параметр arg() может быть только кортежем или словарем», но вы передаете список. Кроме того, ваш список параметров выглядит как один кортеж, а не список с 4 значениями. Попробуйте изменить

cur.execute(
    " INSERT INTO MONTHLY_BUDGET VALUES (?, ?, ?, ?, ?)", <--- Not sure!!!
    [(sheet.cell_value(rows,cols))])

to

cur.execute(
    " INSERT INTO MONTHLY_BUDGET VALUES (?, ?, ?, ?, ?)", <--- Not sure!!!
    (sheet.cell_value(rows,cols)))

... или, может быть

cur.execute(
    " INSERT INTO MONTHLY_BUDGET VALUES (?, ?, ?, ?, ?)", <--- Not sure!!!
    ((sheet.cell_value(rows,cols))))

NB: не проверено. Я всегда менял способ вызова переменных связывания в вашем SQL.

person David Marx    schedule 04.01.2015
comment
Это работает... но теперь я получаю другую ошибку: Файл C:\Users\praveen\Desktop\ReadDat (sheet.cell_value(rows,cols))) TypeError: объект 'str' не вызывается - person Praveenks; 04.01.2015
comment
Я отредактировал свой пост. Я не думаю, что вы правильно использовали переменные связывания в своем sql. - person David Marx; 04.01.2015