python 接收错误:字符串格式化期间未转换所有参数

1u4esq0p  于 2023-02-18  发布在  Python
关注(0)|答案(2)|浏览(157)

我刚开始使用Python,我不明白怎样才能将正确的输入发送到查询中。

list_of_names = []

    for country in country_name_list.keys():
        list_of_names.append(getValueMethod(country))

    sql_query = f"""SELECT *  FROM table1
                            where name in (%s);"""
                           

    db_results = engine.execute(sql_query, list_of_names).fetchone()
Give the error " not all arguments converted during string formatting"
xwmevbvl

xwmevbvl1#

正如John Gordon的注解所暗示的,SQL语句中占位符的数量应该与列表中元素的数量匹配。但是SQLAlchemy 2.0+不再接受原始SQL语句。

import sqlalchemy as sa
...

# SQL statements should be wrapped with text(), and should used
# the "named" parameter style.
sql_query = sa.text("""SELECT * FROM table1 where name in :names)"""

# Values should be dictionaries of lists of dictionaries,
values = {'names': list_of_names}

# Execute statements using a context manager.                       
with engine.connect() as conn:
    db_results = conn.execute(sql_query, values).fetchone()
pqwbnv8z

pqwbnv8z2#

如果我没猜错的话,有一个更简单的解决方案。如果你写花括号{},而不是花括号(),并且你在花括号里面放一个变量,包含%s值,应该可以工作。我不知道sql是怎么工作的,但是你应该每边用一个,而不是三个。
对不起,我不是英语。从这一点来看,也许我对这个问题没有帮助,因为我没有正确理解。

相关问题