0

I'm facing a problem trying to insert a CSV file with 800 records in the database. This gives me the following error: MySQLdb.ProgrammingError: not enough arguments for format string. I already checked and the exchanges and variables are correct, could you help me what would this problem be? Here is the code:

import MySQLdb
import csv
conn = MySQLdb.connect(host="127.0.0.1", user="root", password="", database="csm")

cursor = conn.cursor()
csv_data = csv.reader(open('teste2.csv'))
header = next(csv_data)

for row in csv_data:
    print(row)
    cursor.execute(
        "INSERT INTO estoque1 (release, official, order, date, product, client, sales, sales, quant) VALUES (%s, %s, %s, %s, %s ,%s ,%s ,%s ,%s)", row)

conn.commit()
cursor.close()

I'm facing this error but idk how to solve this. Anyone have some tips about this how can i solve?

Follow the image:enter image description here

0

2 Answers 2

2

Because you're passing the array as an argument while the execute() function expects all the elements of the array as a single argument.

You should be able to pass the array like this:

cursor.execute(
    "INSERT INTO estoque1 (release, official, order, date, product, client, sales, sales, quant) VALUES (%s, %s, %s, %s, %s ,%s ,%s ,%s ,%s)",
    *row
)

Note the asterisk.

Sign up to request clarification or add additional context in comments.

Comments

1

The Problem is that you only pass one parameter (the row list) to the 9 placeholders in your string. To fix that you need either convert the list to a tuple, use the "*" operator to unpack the list or pass all the values of the list individually.

Use the * operator to unpack:

row = [1, 2, 3, 4]
"%s %s %s %s" % (*row,)

Use tuple:

row = [1, 2, 3, 4]
"%s %s %s %s" % tuple(row)

Or you list all parameters extra:

row = [1, 2, 3, 4]
"%s %s %s %s" % (row[0], row[1], row[2], row[3])

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.