1

最近、生のSqlクエリを準備している間、しばらく立ち往生しましたがIn clauseIn clauseデータはpython list. さて、ここに私の例を挙げましょう。

欲しかったSQLクエリ

sql_query = 'SELECT * FROM student WHERE first_name IN ("Dean");'

持っていたデータから

data = ["Dean"]
query = 'SELECT * FROM student WHERE first_name IN %s;' % str(tuple(data))
# result was "SELECT * FROM student WHERE first_name IN ('Dean',) "
# see the *Comma* just before close parentheses which is a Sql error

しかし、いくつかの練習をした後、私はこのようなものの解決策を思いつきました

str_data = ','.join(repr(x) for x in data)
query = 'SELECT * FROM student WHERE first_name IN (%s);' % str_data

# Gives proper result i.e "SELECT * FROM student WHERE first_name IN ('Dean');"

今私の質問は、これはエレガントなソリューションですか、それとも Python には他にもいくつかの最適化されたアプローチがあります。これについてあなたの意見を持っていただければ幸いです:)。

別のソリューションに到達した編集

data = tuple(data) if len(data) > 1 else "('%s')" % data[0] # Assumption: data  should not be empty (in my case it is true)
query = 'SELECT * FROM student WHERE first_name IN {};'.format(data)

注:さらに最適化できる場合は、引き続き皆さんからのビューを探しています。

4

1 に答える 1