Вставка данных в SQL server из файла Excel

#mysql #python-3.x

#mysql #python-3.x

Вопрос:

Прежде всего, извините за недостаток знаний о базах данных, я впервые работаю с ними.

У меня возникли некоторые проблемы при попытке получить данные из файла Excel и поместить их в базу данных.

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

 import pandas as pd
import pyodbc

server = 'XXXXX'
db = 'XXXXXdb'

# create Connection and Cursor objects
conn = pyodbc.connect('DRIVER={SQL Server};SERVER='   server   ';DATABASE='   db   ';Trusted_Connection=yes')
cursor = conn.cursor()

# read data from excel
data = pd.read_excel('data.csv')
  

Но я действительно не знаю, что теперь делать.

У меня есть 3 таблицы, которые связаны с помощью ‘ProductID’, мой файл Excel имитирует базу данных, что означает, что всем столбцам в файле Excel есть место для перехода в БД.

Мой план состоял в том, чтобы прочитать файл Excel и составить списки с каждым столбцом, затем вставить в БД значение каждого столбца, но я понятия не имею, как создать запрос, который может это сделать.

Как только я получу запрос, я думаю, что вставка данных может быть выполнена следующим образом:

 query = "xxxxxxxxxxxxxx"

for row in data:
    #The following is not the real code
    productID = productID
    name = name
    url = url

    values = (productID, name, url)

    cursor.execute(query,values)

conn.commit()
conn.close
  

База данных выглядит следующим образом.

https://prnt.sc/n2d2fm

http://prntscr.com/n2d3sh

http://prntscr.com/n2d3yj

Редактировать:

Пытался сделать что-то подобное, но я получаю ошибку типа «не все аргументы преобразованы при форматировании строки».

 import pymysql
import pandas as pd

connStr = pymysql.connect(host = 'xx.xxx.xx.xx', port = xxxx, user = 'xxxx', password = 'xxxxxxxxxxx') 

df = pd.read_csv('GenericProducts.csv')

cursor = connStr.cursor()

query = "INSERT INTO [Productos]([ItemID],[Nombre])) values (?,?)"

for index,row in df.iterrows():

    #cursor.execute("INSERT INTO dbo.Productos([ItemID],[Nombre])) values (?,?,?)", row['codigoEspecificoProducto'], row['nombreProducto'])
    codigoEspecificoProducto = row['codigoEspecificoProducto']
    nombreProducto = row['nombreProducto']

    values = (codigoEspecificoProducto,nombreProducto)

    cursor.execute(query,values)


connStr.commit()
cursor.close()
connStr.close() 

  

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

Комментарии:

1. tomaztsql.wordpress.com/2018/07/15 /… попробуйте это

2. Попробовал, и, похоже, это правильный путь, хотя при получении новых ошибок вопрос будет отредактирован с новой информацией

3. у вас есть (?,?,?), но вы вставляете только два значения

4. Изменил его на (?,?), но я все еще получаю ту же ошибку

Ответ №1:

Попробуйте это, вы, кажется, изменили библиотеку с pyodbc на mysql, похоже, ожидается %s вместо ?

 import pymysql
import pandas as pd

connStr = pymysql.connect(host = 'xx.xxx.xx.xx', port = xxxx, user = 'xxxx', password = 'xxxxxxxxxxx') 

df = pd.read_csv('GenericProducts.csv')

cursor = connStr.cursor()

query = "INSERT INTO [Productos]([ItemID],[Nombre]) values (%s,%s)"

for index,row in df.iterrows():

    #cursor.execute("INSERT INTO dbo.Productos([ItemID],[Nombre]) values (%s,%s)", row['codigoEspecificoProducto'], row['nombreProducto'])
    codigoEspecificoProducto = row['codigoEspecificoProducto']
    nombreProducto = row['nombreProducto']

    values = (codigoEspecificoProducto,nombreProducto)

    cursor.execute(query,values)


connStr.commit()
cursor.close()
connStr.close()