How to check if a list in python and row in PostgreSQL table contain same files?

Question:

I have a row named filename in postgresql table named xml_joblist which contain many files, and a list named files_name in python which contain several files that are sorted after some process. I want to compare filename & files_name and check whether there are any files matching.

|filename |
|---------|
|file_111 |
|file_555 |
|file_888 |
|file_333 | 
|file_445 |
|   .     |
|   .     |
| goes-on |

the above given is the filename row in postgresql table

files_name = [file_789, file_456, file_555, file_111]

the above given is the files_name list i python

How can i write a sql statement to do this process in python?

Expected result:

matchin_files = [file_555, file_111]
Asked By: Mega_Mind

||

Answers:

To compare filesnames in PostgreSQL with the files_name list in Python and find the matching files, you can use the IN operator in a SELECT statement.

Here is an example of how you can write a SQL statement to do this in Python using the psycopg2 library:

import psycopg2

# Connect to the database
conn = psycopg2.connect("dbname=mydatabase user=myuser password=mypassword")

# Create a cursor
cur = conn.cursor()

# Define the list of files
files_name = ["file_789", "file_456", "file_555", "file_111"]

# Build the SELECT statement
sql = "SELECT filename FROM xml_joblist WHERE filename IN %s"

# Execute the SELECT statement
cur.execute(sql, (tuple(files_name),))

# Fetch the matching files
matching_files = cur.fetchall()

# Print the matching files
print(matching_files)

# Close the cursor and connection
cur.close()
conn.close()

This will execute a SELECT statement that retrieves the filename column where the filename is in the files_name list. The resulting rows will be stored in the matching_files variable, which will contain the list of matching files.

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

Note that this returns list of tuples. You can use list comprehension to covert it to proper list

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

# Returns: ["file_555", "file_111"]
Answered By: Pratik Ghodke
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.