sql >> データベース >  >> RDS >> PostgreSQL

WHERE IN...INTリストのDB.executeにパラメータを渡します

    編集:この答えがSQLインジェクション攻撃に対する組み込みの保護を回避すると思う場合は、間違っています。もっとよく見てください。

    pg8000(PostgreSQLデータベースエンジンへのDB-API 2.0互換のPure-Pythonインターフェース)を使用したテスト:

    これは、複数のパラメータを「IN」句に渡すための推奨される方法です。

    params = [3,2,1]
    stmt = 'SELECT * FROM table WHERE id IN (%s)' % ','.join('%s' for i in params)
    cursor.execute(stmt, params)
    

    完全な例:

    >>> from pg8000 import DBAPI
    >>> conn = DBAPI.connect(user="a", database="d", host="localhost", password="p")
    >>> c = conn.cursor()
    >>> prms = [1,2,3]
    >>> stmt = 'SELECT * FROM table WHERE id IN (%s)' % ','.join('%s' for i in prms)
    >>> c.execute(stmt,prms)
    >>> c.fetchall()
    ((1, u'myitem1'), (2, u'myitem2'), (3, u'myitem3'))
    


    1. SQL内部結合

    2. EF4でNOLOCKヒントを使用していますか?

    3. 最大値を見つけて、SQLサーバーの別のフィールドから対応する値を表示します

    4. MySQLは日付に日を追加します