绑定参数0时出错-可能不支持python类型
我不明白为什么我会犯这个错误。我试图让用户选择他们想要搜索的内容和值。i、 e按服务、价值交付进行搜索。这里有几个问题 不能将占位符用作列名。它只能用于表达式,替换将是来自参数列表的文本值。如果您有一个变量列名,则需要使用普通字符串格式;您应该有一个白名单来防止SQL注入。 占位符不会在引号中替换。 您的值嵌套得太深了。c.execute的第二个参数应该是一个iterable,每个元素填充一个占位符。搜索是一个元组列表,然后在编写搜索时将其放入另一个元组中,。因此,这些值嵌套在两层深的位置,而不是在元组参数中。 函数的默认值不应是对输入的调用。默认值是在定义函数时计算的,而不是在调用函数时计算的。因此,在加载脚本时,这将要求您输入,并在每次调用函数时使用这些相同的值作为默认值。 在执行查询之前调用c.fetchall。 您缺少items:循环中的for项。 SELECT查询之后不需要conn.commit,只需要修改数据库的查询。您不应该在此函数中调用conn.close,因为它没有打开连接;其他功能可能仍需要使用该连接。 此外,不需要在f字符串中使用str,因为格式化会自动将值转换为字符串绑定参数0时出错-可能不支持python类型,python,sqlite,Python,Sqlite,我不明白为什么我会犯这个错误。我试图让用户选择他们想要搜索的内容和值。i、 e按服务、价值交付进行搜索。这里有几个问题 不能将占位符用作列名。它只能用于表达式,替换将是来自参数列表的文本值。如果您有一个变量列名,则需要使用普通字符串格式;您应该有一个白名单来防止SQL注入。 占位符不会在引号中替换。 您的值嵌套得太深了。c.execute的第二个参数应该是一个iterable,每个元素填充一个占位符。搜索是一个元组列表,然后在编写搜索时将其放入另一个元组中,。因此,这些值嵌套在两层深的位置,而不
def get_info(search_by=input("Search by: "), value=input("Value: ")):
search = [
(f"{str(search_by)}", f"{str(value)}")
]
items = c.fetchall()
c.execute("SELECT * FROM credentials WHERE (?) LIKE '(?)'", (search,))
print(f"{item[0]}", f"{item[1]}", f"{item[2]}", f"{item[3]}")
conn.commit()
conn.close()
get_info()
def get_info(search_by=None, value=None):
valid_search_by = ['col1', 'col2', 'col3']
if search_by is None:
search_by = input("Search by: ")
if search_by not in valid_search_by:
raise ValueErr("Invalid search_by")
if value is None:
value = input("Value: ")
c.execute(f"SELECT * FROM credentials WHERE {search_by} LIKE ?", (value,))
items = c.fetchall()
for item in items:
print(f"{item[0]}", f"{item[1]}", f"{item[2]}", f"{item[3]}")