2017-03-19 7 views
0

csvファイル(ローカルデスクトップ上)からリモートSQLデータベースにデータをアップロードしようとしています。これは私のクエリですPython 3のSQL挿入クエリでエラーが発生しました。「列カウントが行の値の数と一致しません」

dsn = "dsnname";pwd="password" 
import pyodbc 
csv_data =open(r'C:\Users\folder\Desktop\filename.csv') 

def func(dsn): 

    cnnctn=pyodbc.connect(dsn) 
    cnnctn.autocommit =True 
    cur=cnnctn.cursor() 


    for rows in csv_data: 

     cur.execute("insert into database.tablename (colname) value(?)", rows) 


    cur.commit() 
    cnnctn.commit() 
    cur.close() 
    cnnctn.close() 
    return() 

c=func(dsn) 

問題は、すべてのデータが指定した1つの列にアップロードされることです。 col名を指定しないと、実行されません。私はデータベースのテーブルに9列あり、このデータを別々の列にアップロードしたいと思います。

答えて

0

SQLを挿入するときは、挿入する列を確実に指定する必要があります。たとえば、あなたが実行すると:あなたはSQLをせている

INSERT INTO table (column_name) VALUES (val); 

はあなたがその特定の行のためのvalにCOLUMN_NAMEをマップすることを知っています。したがって、最初の括弧内の列の数が、2番目の括弧内の値の数と一致するようにする必要があります。

+0

ありがとうございます。私の場合は、どのように挿入するか指定することができます。したがって、csvファイルには1200行以上のものがあります。どのように私は、各列のアカウントを自分のSQLクエリを述べることができます – Blue

+0

私はあなたの質問を理解するか分からない。 csvの列に基づいて動的に挿入しますか? – meyer9

+0

はい。だから私はテーブルに9列を挿入し、私のファイルに9があると言うことができます。ファイルからそれらの列を挿入したいと思います。だから私は何を求めているのですか?私はすべての列の名前を書く必要がありますか?また値を取得する方法。 – Blue

関連する問題