2017-09-07 11 views
1

pypyodbcを使用してMS-SQLにpandasデータフレームを挿入したいとします。PythonでMS-SQLにデータフレームを挿入するときのエラー

は、最初にデータフレームを作成します: はここに私のコードであること

df = pd.DataFrame({'C1': [11, 21, 31], 
        'C2': [12, 22, 32], 
        'C3': [13, 23, 33]}) 
tablename = tb 

をして、このコードは、エラーメッセージが表示されました

def insertDFtoSQL(df,tablename): 
    con = ppo.connect(r'Driver={SQL Server}; 
        'r'Server=se;' 
         r'Database=db;' 
         r'Trusted_Connection=yes;') 
    cols = ','.join([k for k in df.dtypes.index]) 
    params = ','.join('?' * len(df.columns)) 
    sql = 'INSERT INTO {0} ({1}) VALUES ({2})'.format(tablename, cols, params) 
    data = [tuple(x) for x in df.values] 
    con.cursor().executemany(sql, data) 
    con.commit() 
    con.close() 

その後、MS-SQLにデータフレームを挿入「型オブジェクトsubscriptableではありません "。私はそれについてexecutemany(sql, data)

executemany(sql, data1)として任意のアイデアでデータを交換する

data1 = [(11,12,13),(22,23,24),(32,33,34)] 

を使用した場合

しかし、すべてが右のでしょうか?

答えて

2

df.values<class 'numpy.ndarray'>あり、そしてあなたが

data = [tuple(x) for x in df.values] 

を行うときは、タイプ<class 'numpy.int64'>の要素を含むタプルのリストを取得します。 pypyodbcは「正常な」Pythonの型を含むようにタプルを期待しているので、あなたは、昔ながらのint値に数値を変換するために

data = [tuple(int(col) for col in row) for row in df.values] 

を使用する必要があります。

+0

こんにちは、@Gord Thompson、ありがとうございます。それは私の問題のための素晴らしい解決策です。 –

関連する問題