2016-10-04 12 views
0

私は(使用してのpython &デシベルがPostresある)SQLコマンドを持っているだけでいくつかの条件でいくつかのレコードを選択します: だから、私のクエリは次のとおりです。PythonのSQLコマンドでDatetimeをパラメータとして送信するにはどうすればよいですか?

current_date= datetime.now() 

    tt = yield self.db.execute(self.db.execute('SELECT "Id", "RubricId", "IsRubric" 
    FROM whis2011."CoockieUserInterests" 
    'WHERE "UserId" = %s AND "Date" = %s ' 
    % (Id, current_date)) 

result=tt.fetchall()[0] 

問題:私はフィールドに日時を渡したいです「日付」は、私はエラーを得た:

syntax error at or near "00" 
LINE 1: ...rests" WHERE "UserId" = 1 AND "Date" = 2016-10-05 00:22:07.3... 
                 ^

デシベルのすべての「日付」フィールドが似ている:2016年9月25日夜12時00分○○秒

また、データベース内のフィールド「日付」のデータ型」であり、タイムゾーンなしのタイムスタンプ "となります。

それは私のプールです:

application.db = momoko.Pool(
    dsn='dbname=xxxx user=xxxxx password=xxxxx host=xxxx port=5432', 
    size=1, 
    ioloop=ioloop, 
) 

私はデシベルで、このような形式で「日付」を選択することができますどのように?

+1

あなたは[SQLインジェクション攻撃](http://bobby-tables.com)に脆弱です。このq/aを読む必要があります:http://stackoverflow.com/questions/10950362/protecting-against-sql-injection-in-python –

答えて

1

あなたは、postgresqlへの接続に使用しているモジュールを記述していません。暫定的にはpsycopg2としましょう。その場合

は、クエリにパラメータを渡すために、次の使用:

current_date = datetime.now() 

self.db.execute(
    'SELECT Id, RubricId, IsRubric ' 
    'FROM whis2011.CoockieUserInterests ' 
    'WHERE UserId = %s AND Date = %s', 
    (Id, current_date)) 

注意を我々はここでSQL文字列の%補間演算子を使用してないです。代わりに%sを使用してSQLパラメータをマークし、別々にそれらを渡しますcursor.execute

異なるパッケージを使用してPostgresに接続すると、異なる方法でパラメータがマークされることがあります。詳細は、ドキュメントまたはモジュールparamstyleを参照してください。

+0

私は "momoko"を使用していますが、私はカーソルを持っていません! – Nikito

+0

確かにドキュメントの大まかさは、 'momoko'は' psycopg2'のラッパーであり、 '' connection.execute'(http://momoko.61924.nl/ja/latest/) api.html#momoko.Connection.execute)メソッドは 'cursor.execute'のようにパラメータを受け取りますか? – donkopotamus

+0

私は変更されましたが、まだエラーです。私は自分の接続プールでコードを更新しました。 – Nikito

関連する問題