我正在尝试创建一个可执行以下操作的脚本;
获取一个文件(我们称之为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)
我正在寻找更好的方法,我正在寻求建议。感谢您的帮助。
答案 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()