Вставить данные из Python в SQL Server - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь вставить некоторые данные из фрейма данных Python, уже созданного в Jupyter Notebook, в SQL Server Management Studio 18

Код, который я написал как на Python, так и на сервере SQL, представлен ниже

PANDAS DATAFRAME

(это типичная строка моего информационного кадра)

Название фильма IMDB Рейтинг Актеры Режиссер Сюжет Сюжет Ключевые слова Жанры

Аватар 7.8 [Сэм-Уортингтон, Зои-Салдана, Сигурни-Плетение] Джеймс-Кэмерон Параличный морской пехотинец, отправленный на Луну Пан [аватар, будущий, морской, местный, параплегический] [Действие, Приключение, Фэнтези]

Снимок экрана Python Dataframe

SQL

USE Movies_Dataset;
GO
DROP TABLE IF EXISTS data_table;
GO
CREATE TABLE data_table
(
 [MovieID] INT IDENTITY(1,1)
,[Movie_Title] VARCHAR(MAX)
,[IMDB_Rating] VARCHAR(MAX)
,[Actors] VARCHAR(MAX)
,[Direcor] VARCHAR(MAX)
,[Plot_Summary] VARCHAR(MAX)
,[Plot_Keywords] VARCHAR(MAX)
,[Genres] VARCHAR(MAX)
);

PYTHON

import pyodbc

connStr = pyodbc.connect("DRIVER={SQL Server Native Client 11.0};"
                         "SERVER=LAPTOP-IFTEP7AL;"
                         "DATABASE=Movies_Dataset;"
                         "Trusted_Connection=yes")

cursor = connStr.cursor()

for index, row in final_dataset.iterrows():
    cursor.execute("""INSERT INTO dbo.data_table(
    [Movie_Title], 
    [IMDB_Rating], 
    [Actors], 
    [Director], 
    [Plot_Summary], 
    [Plot_Keywords],
    [Genres]) values (?, ?, ?, ?, ?, ?, ?)""", 
    row['Movie Title'],row['IMDB 
Rating'],row['Actors'],row['Director'],row['Plot Summary'],row['Plot 
Keywords'],row['Genres']) 

connStr.commit()

cursor.close()

connStr.close()

Хотя мойкод вроде нормально, не работает. И я подозреваю, что это потому, что я пытаюсь вставить список (например, актеры или жанры) вместо varchars.

У вас есть идеи, как это сделать?

Ошибка Iget (скриншот)

Также я использовал sqlalchemy со следующим кодом Python:

import pyodbc

import sqlalchemy

from sqlalchemy import create_engine

import urllib

quoted = urllib.parse.quote_plus("DRIVER={SQL Server Native Client 
11.0};SERVER=LAPTOP-IFTEP7AL;DATABASE=Movies_Dataset")

engine = create_engine('mssql+pyodbc:///?odbc_connect={}'.format(quoted))

final_dataset.to_sql('data_table', schema='dbo', con = engine)

result = engine.execute('SELECT COUNT(*) FROM [dbo].[data_table]')

result.fetchall()

ошибка от sqlalchemy

1 Ответ

0 голосов
/ 23 октября 2019

Когда я использую pyodbc, обычно используют процедуры ..

import pyodbc

connStr = pyodbc.connect("DRIVER={SQL Server Native Client 11.0};"
                         "SERVER=LAPTOP-IFTEP7AL;"
                         "DATABASE=Movies_Dataset;"
                         "Trusted_Connection=yes")

cursor = connStr.cursor()

sqlExecSP="""\
                        EXEC [dbo].[InsertInMyTable] @Movie_Title = ? ,@IMDB_Rating = ? ,@Actors = ? ,@Director = ?;
          """   

for index, row in final_dataset.iterrows():

    params = (row['Movie Title'],row['IMDBRating'],row['Actors'],row['Director'])
    cursor.execute(sqlExecSP, params)

connStr.commit()

cursor.close()

connStr.close()
...