#python-3.x #azure-sql-database
#python-3.x #azure-sql-database
Вопрос:
Как я могу организовать массовую вставку фрейма данных python в соответствующий azure SQL. Я вижу, что ВСТАВКА работает с отдельными записями :
ВСТАВИТЬ В XX ([Field1]) ЗНАЧЕНИЯ (value1);
Как я могу вставить все содержимое dataframe в таблицу Azure?
Спасибо
Комментарии:
1. Вы можете записать фрейм данных в файл csv, а затем использовать команду sql
BULK INSERT
для вставки данных.2. Спасибо, МАССОВАЯ ВСТАВКА работает с данными MS AZURE. Как я могу передать таблицу данных для вставки в команду BULK INSERT?
3. Что касается команды МАССОВОЙ ВСТАВКИ, пожалуйста, обратитесь к learn.microsoft.com/en-us/sql/t-sql/statements /…
4. Спасибо, МАССОВАЯ ВСТАВКА работает с данными, доступными в MS AZURE или в файле, мои данные находятся во фрейме данных, размер которого превышает размер обычного файла csv
5. Вы можете использовать
pandas.DataFrame.to_sql
для вставки данных: pandas.pydata.org/pandas-docs/stable/reference/api /…
Ответ №1:
Согласно моему тесту, мы также можем использовать to_sql
для вставки данных в Azure sql
например
from urllib.parse import quote_plus
import numpy as np
import pandas as pd
from sqlalchemy import create_engine, event
import pyodbc
# azure sql connect tion string
conn ='Driver={ODBC Driver 17 for SQL Server};Server=tcp:<server name>.database.windows.net,1433;Database=<db name>;Uid=<user name>;Pwd=<password>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;'
quoted = quote_plus(conn)
engine=create_engine('mssql pyodbc:///?odbc_connect={}'.format(quoted))
@event.listens_for(engine, 'before_cursor_execute')
def receive_before_cursor_execute(conn, cursor, statement, params, context, executemany):
print("FUNC call")
if executemany:
cursor.fast_executemany = True
#insert
table_name = 'Sales'
# For test, I use a csv file to create dataframe
df = pd.read_csv('D:data.csv')
df.to_sql(table_name, engine, index=False, if_exists='replace', schema='dbo')
#test after inserting
query = 'SELECT * FROM {table}'.format(table=table_name )
dfsql = pd.read_sql(query, engine)
print(dfsql)
Комментарии:
1. Спасибо, к сожалению, это генерирует ошибку возврата self.dbapi.connect(* cargs, ** cparams) pyodbc. Ошибка интерфейса: (‘IM002’, ‘[IM002] [Microsoft] [ODBC Driver Manager] Имя источника данных не найдено, и драйвер по умолчанию не указан (0) (SQLDriverConnect)’)
2. Есть ли какая-нибудь возможность забронировать с вами приватный сеанс? ($$)