将数据从 Python 插入到 SQL 服务器

Insert data from Python to SQL Server

我正在尝试将已在 Jupyter Notebook 中创建的 python 数据框的一些数据插入到 SQL Server Management Studio 18

我在 Python 和 SQL 服务器中编写的代码如下所示

PANDAS 数据框

(这是我的数据框的典型行)

电影名称 IMDB 评分演员导演情节摘要情节关键词流派

Avatar 7.8 [Sam-Worthington, Zoe-Saldana, Sigourney-Weave] James-Cameron 被派往月球的截瘫海军陆战队员 Pan [头像, 未来, 海军陆战队, 本土, 截瘫] [动作, 冒险, 奇幻]

Python Dataframe Screenshot

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。

你知道怎么做吗?

The error I get (screenshot)

我还使用了带有以下 python 代码的 sqlalchemy:

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()

the error from sqlalchemy

我在使用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()