Python脚本,它从文件中获取值并将它们作为变量传递给postgres命令

时间:2014-03-03 22:28:26

标签: python postgresql

我正在尝试创建一个可执行以下操作的脚本;

获取一个文件(我们称之为input.txt),并假设将它们传递给postgres sql语句。

#! /usr/bin/python
import psycopg2
#Trying to connect to DB
try:
    conn= psycopg2.connect("dbname='test' host='test' user='test' password='test'")
except:
    print "I am unable to connect to the DB."
cur = conn.cursor()
with open('input.txt') as f:
    for row in f:
            cursor.execute ('''Delete from filterstagetbl
                               where filtersetidn IN
                               (select filtersetidn from filtersettbl where name = '$s');''',
                            row)

我正在寻找更好的方法,我正在寻求建议。感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

每行是包含一个值还是多个?如果很多,那么您必须先将该行解析为其各个元素。看起来你只需要一个值,但请记住,这些行最后会有换行符,这将阻止你匹配数据库内容。

如果无法连接到数据库,那么打印错误消息非常好,但是终止程序的执行是明智的。你可以同时使用sys.exit()

psycopg2中的参数替换使用`%s作为其参数替换标记。执行的第二个参数必须始终是元组,即使只有一个数据项。所以你的代码应该更像这样:

#! /usr/bin/python
import psycopg2
#Trying to connect to DB
try:
    conn= psycopg2.connect("dbname='test' host='test' user='test' password='test'")
except:
    import sys; sys.exit("I am unable to connect to the DB.")
cur = conn.cursor()
with open('input.txt') as f:
    for row in f:
            cursor.execute ('''Delete from filterstagetbl
                               where filtersetidn IN
                               (select filtersetidn from filtersettbl where name = %s);''',
                            (row[:-1])

最后,如果您不提交对数据库的更改将不会永久保留,因此您应该完成

conn.commit()