1

チェックボックスからユーザー入力を取得し、MySQL テーブルから対応する行を返す Web サイトがあります。

たとえば、ユーザーがいくつかの色を選択すると、Web サイトはテーブルからその色のオブジェクトを表示します。

問題は、ユーザーが 1 つの色のみを選択すると、MySQL クエリが正しく作成されず、エラーが発生することです。colors以下の配列に注意してください。

したがって、これは機能します:

import MySQLdb
db = MySQLdb.connect(host="...", user="...", port=..., db="...", passwd="...")
colors = ["red", "blue"]
cursor.execute("SELECT * FROM `objects` WHERE `color` IN %s",(colors,))

そして、これはしません:

import MySQLdb
db = MySQLdb.connect(host="...", user="...", port=..., db="...",passwd="...")
colors = ["red"]
cursor.execute("SELECT * FROM `objects` WHERE `color` IN %s", (colors,))

これを修正する方法はありますか?今のところ、私は一時的に偽の「色」(データベースにオブジェクトがリンクされていないもの) を追加していますが、これは明らかに理想的な解決策ではありません。

4

2 に答える 2

0

.join 演算子を使用できます。

colors = ["red", "blue"]
colors = ",".join(colors)

output:'red,blue'

colors = ["red"]
colors = ",".join(colors)

output: 'red'

コードは次のようになります

import MySQLdb as mdb
con = mdb.connect('', '','','')
with con:
    cur = con.cursor(mdb.cursors.DictCursor)
    colors = ["red","blue"]
    query = """SELECT * FROM objects where color in (""" + ",".join(colors) + """)
    cur.execute(users_query)
    rows = cur.fetchall()
于 2013-02-21T11:28:34.903 に答える