import psycopg2

conn = psycopg2.connect("dbname=mydatabase user=myuser password=mypassword")

cur = conn.cursor()

files_name = ["file_789", "file_456", "file_555", "file_111"]

sql = "SELECT filename FROM xml_job WHERE filename IN %s"

cur.execute(sql, (tuple(files_name),))

matching_files = cur.fetchall()


matching_files = [f[0] for f in matching_files]


print(matching_files)


cur.close()
conn.close()

这是我目前的代码.它给出了以下输出:

[("file_555",), ("file_111",)] # output

我的PostgreSQL表有两行:一行名为‘文件名’,另一行名为‘备注’ 我希望我的输出如下:

[("file_555","remark1"), ("file_111","remark2")] # output

推荐答案

我没有你的数据库,所以我要记下你可能应该做的事.

但对于其余部分,您可以使用它来查找匹配项并提取备注.请注意,顺序会更改,但您可以轻松地再次对其进行排序.


files_name = ["file_789", "file_456", "file_555", "file_111"]

# adjust your db stuff probably as follows:

#sql = "SELECT filename, remark FROM xml_job WHERE filename IN %s"
#matching_files = [(f[0],f[1]) for f in matching_files]

rows = [("file_555","R1"), ("file_111",'R2')]

#build a dict associating filename and remark.
di = {tu[0]:tu[1] for tu in rows}

#use set operators to find matches
matches = set(files_name) & di.keys()

#now pull the remark from the dictionary you built.
res = [(name,di[name]) for name in matches]

print(res)

output:

[('file_111', 'R2'), ('file_555', 'R1')]

此外,不是使用晦涩难懂的f[0], f[1]基于索引的表示法来寻址字段,而是有一个称为cursor.descriptionn的数组,其中一个字段提供列名,另一个提供其索引.对不起,我自己也用过,但我以前也用过这个,当你能看到列名时,代码就更容易读懂了.

Python相关问答推荐

Pandas 在最近的日期合并,考虑到破产

根据在同一数据框中的查找向数据框添加值

把一个pandas文件夹从juyter笔记本放到堆栈溢出问题中的最快方法?

海上重叠直方图

当递归函数的返回值未绑定到变量时,非局部变量不更新:

启动带有参数的Python NTFS会导致文件路径混乱

手动设置seborn/matplotlib散点图连续变量图例中显示的值

基于另一列的GROUP-BY聚合将列添加到Polars LazyFrame

为什么调用函数的值和次数不同,递归在代码中是如何工作的?

提高算法效率的策略?

Polars Group by描述扩展

Python pint将1/华氏度转换为1/摄氏度°°

使用python playwright从 Select 子菜单中 Select 值

如何反转一个框架中列的值?

在Django中重命名我的表后,旧表中的项目不会被移动或删除

如何从一个维基页面中抓取和存储多个表格?

如何让PYTHON上的Selify连接到现有的Firefox实例-我无法连接到Marionette端口

PYODBC错误(SQL包含-26272个参数标记,但提供了235872个参数,HY 000)

基于2级列表的Pandas 切片3级多索引

如何将参数名作为参数传入到函数中?