【发布时间】:2017-03-09 07:31:07
【问题描述】:
我继承了一个 Postgres 数据库,目前正在清理它。我创建了一个算法来查找数据错误的行。该算法被编码到名为checkProblems() 的函数中。使用它,我可以选择包含坏行的行,如下所示...
schema = findTables(dbName)
conn = psycopg2.connect("dbname='%s' user='postgres' host='localhost'"%dbName)
cur = conn.cursor()
results = []
for t in tqdm(sorted(schema.keys())):
n = 0
cur.execute('select * from %s'%t)
for i, cs in enumerate(tqdm(cur)):
if checkProblem(cs):
n += 1
results.append({
'tableName': t,
'totalRows': i+1,
'badRows' : n,
})
cur.close()
conn.close()
print pd.DataFrame(results)[['tableName', 'badRows', 'totalRows']]
现在,我需要删除错误的行。我有两种不同的方法。首先,我可以在临时表中写入干净的行,然后重命名该表。我认为这个选项太占用内存了。如果我能够只删除光标处的特定记录会更好。这甚至是一种选择吗?
否则,在这种情况下删除记录的最佳方法是什么?我猜这应该是数据库管理员做的比较常见的事情了……
【问题讨论】:
标签: python postgresql python-2.7 psycopg2