Maison > Questions et réponses > le corps du texte
J'essaie d'utiliser in-query en python. Mais j'ai différentes exceptions à cela.
La première tentative a été :
query = """select keyword from keyword where keyword in %(ids)s and country = %(country)s""" cursor.execute(query, {'ids': tuple(ids), 'country': country})
Il donne l'erreur suivante : Failedprocessing pyformat-parameters; Python“tuple”无法转换为 MySQL 类型
La deuxième tentative était :
str_keywords = ",".join(tuple("'" + str(i) + "'" for i in ids)) query = """select keyword from keyword where keyword in (%s) and country = %s""" cursor.execute(query, (str_keywords, country))
Cela ne donne pas d'erreur mais ne fonctionne pas.
Des suggestions ?
P粉8091101292024-03-28 20:14:43
Vous pouvez utiliser des chaînes f avec des tuples :
ids = ('1,2,3','54','67') code = 'BR' query = f"""select keyword from keyword where keyword in {ids} and country_code = {code} and brand_app is not null""" query
Sortie :
"select keyword\n from keyword \n where keyword in ('1,2,3', '54', '67') and country_code = BR\n and brand_app is not null"
P粉0578693482024-03-28 13:21:14
Essayez ce qui suit :
params = ",".join(["%s"] * len(ids)) query = f"""select keyword from keyword where keyword in ({params}) and country = %s""" cursor.execute(query, (*ids, country))
L'objectif ici est pour l'espace réservé ids
中的每个值构建一个 in (%s, %s, %s, ..., %s)
子句,其中包含一个 %s
.
Il y a quelques points à noter :
IN
Il peut y avoir une limite supérieure au nombre d'espaces réservés dans une clause. Voir Limites conditionnelles MySQL IN pour plus de détails. ids
为空,则此查询无效。您可能已经有一些逻辑来处理空 ids
列表的情况,或者您的代码可能永远不会在 ids
est vide. Sinon, vous devrez travailler sur l'affaire.