2017-02-07 15 views
1

質問:以下のコードでは、日時の値をMS SQLサーバーに挿入するにはどうすればよいですか?SQLテーブルに所定の日時の値を挿入

コンテキスト:

私は2-Dのリストを持っている(すなわち、リストのリスト)Pythonで、私はこのプロジェクトのためのMicrosoft SQL Server 2008でテーブルにアップロードしたいことPythonのpymssqlパッケージを使用しています。各リストの各値は、最初の要素(datetime値)を除いて文字列です。

import pymssql 

db_connect = pymssql.connect(# these are just generic names 
    server = server_name, 
    user = db_usr, 
    password = db_pwd, 
    database = db_name 
    ) 

my_cursor = db_connect.cursor() 
for individual_list in list_of_lists: 
    # the first value in the paranthesis should be datetime 
    my_cursor.execute("INSERT INTO [DB_Table_Name] VALUES (%s, %s, %s, %s, %s, %s, %s, %s)", tuple(individual_list)) 
    db_connect.commit() 

Pythonインタプリタが私のdatetime値を挿入するタフな時間を持っている:ここに は私のコードを読み込む方法です。現在私は%sがあり、それは文字列フォーマッタであることを理解していますが、datetimeのために何を使用すればよいのかは分かりません。これは、データベースの最初の列のフォーマットです。ここで

[(datetime.datetime(2012, 4, 1), '1', '4.1', 'hip', 'A1', 'J. Smith', 'B123', 'XYZ'),...] 

テーブルがどのように見えるかの実例である:

+-----------+------+------+--------+-------+-----------+---------+---------+ 
| date | step | data | type | ID | contact | notif. | program | 
+-----------+------+------+--------+-------+-----------+---------+---------+ 
|2012-04-01 | 1 | 4.1 | hip | A1 | J. Smith | B123 | XYZ | 
|2012-09-05 | 2 | 5.1 | hip | A9 | B. Armst | B123 | ABC | 
|2012-01-16 | 5 | 9.0 | horray | C6 | F. Bayes | P995 | XYZ | 
+-----------+------+------+--------+-------+-----------+---------+---------+ 

「リストのリストは、」この(各リストはタプルに変換された後)のように見えます前もって感謝します。

+0

テーブルの列とリストのサンプルデータを表示できますか? –

+0

@vkp上記の編集を参照してください - ありがとう! – daOnlyBG

+0

あなたのコードは私にとって妥当です。問題はどのように現れていますか?エラーメッセージ?予期しない日付の値が挿入されていますか? ...? –

答えて

0

挿入する前に、日付時刻を "yyyymmdd hh:mm:ss"に設定してみます。 SQLを実行すると、文字列を解析するので、文字列全体を作成して、その文字列を変数として挿入します。以下を参照してください

for individual_list in list_of_lists: 
    # the first value in the parentheses should be datetime 
    date_time = individual_list[0].strftime("%Y%m%d %H:%M:%S") 
    insert_str = "INSERT INTO [DB_Table_Name] VALUES (" + str(date_time) + "),(" + str(individual_list[1]) + ");" 
    print insert_str 
    my_cursor.execute(insert_str) 
    db_connect.commit() 

粗いpythonをお詫びしますが、すべてのフィールドが一致する限り、SQLはそのinsert文を好きにしてください。そうでない場合、それらの値が挿入されるフィールドを指定することができます。

それが動作するかどうかを教えてください。

+0

これはウェブスクレイピングプロジェクトの一部です。私はすでに文字列形式の日付を持っています。問題は、私が扱っているデータベースに 'datetime'という形式の日付列があることです。 datetime型の値をアップロードする方法がない場合は、新しいデータベース列を "varchar"として作成し、文字列としてアップロードしてください。私は文字列としてではなく、datetime値として値をアップロードする方法があるのだろうかと思っていました。 – daOnlyBG

+1

それは正しいです。 Pythonの日付時刻オブジェクトをSQLフィールドに追加する方法はわかりません。 SQLが挿入文字列で認識する日付形式である必要があります。 –

+1

(cc:@daOnlyBG)それを行う方法は、*パラメータ化されたクエリ*を使用しています: 'crsr.execute(" UPDATE table1 SET dtmcol =%s WHERE ID =%s "、(datetime.datetime(2012、11、10 )、3)) ' –

関連する問題