首页 > 解决方案 > 如何将元素从数组传递到查询

问题描述

我想知道,我想如何编写一些代码,这给了我在数据库中找到的元素的索引。

我有这样的功能:

def get_teachers_names(name, lastname):
    try:
        params = config()

        conn = psycopg2.connect(**params)
        cur = conn.cursor()

        select_query = "SELECT id FROM lecturers WHERE name = %s AND lastname = %s"
        record_to_find = (name, lastname)

        cur.execute(select_query, record_to_find)
        records = list(cur)

        conn.commit()
        cur.close()

        return records

    except (Exception, psycopg2.DatabaseError) as error:
        print(error)

当我做类似的事情时:

index = database.get_teachers_names('Name1', 'Surname1')

我得到我想要的索引。但是当我有一个列表时:

names = ('Name1', 'Name2')
surnames = ('Surname1', 'Surname2')

我尝试做同样的事情:

index = database.get_teachers_names(names[0], surnames[0]

我得到 [] 结果。我也试过:

index = database.get_teachers_names(''.join(names[0], ''.join(surnames[0]))

但它也没有奏效。有什么建议么?

标签: pythonpython-3.xpostgresql

解决方案


当您传递一个简单的字符串时它会起作用,因为它们会正确填充查询字符串:

index = database.get_teachers_names('Name1', 'Surname1')

但是,当您传递一个列表时,它不会被正确解析为以下字符串:

"SELECT id FROM lecturers WHERE name = %s AND lastname = %s"

我认为对您来说最好的方法是遍历列表并为每个条目执行此操作: cur.execute(select_query, record_to_find)

然后,您可以将结果附加到记录列表中。


推荐阅读