#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
База данных выглядит следующим образом.
Редактировать:
Пытался сделать что-то подобное, но я получаю ошибку типа «не все аргументы преобразованы при форматировании строки».
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()