【发布时间】:2013-07-08 15:34:54
【问题描述】:
我正在尝试将解析的 dta 数据插入到 postgresql 数据库中,每一行都是一个单独的变量表,并且它一直在工作,直到我在第二行中添加“recodeid_fk”。我现在尝试运行此代码时遇到的错误是:pg8000.errors.ProgrammingError: ('ERROR', '42601', 'syntax error at or near "imp"')。
最终,我希望能够同时解析多个文件并将数据插入数据库,但如果有人能帮助我了解现在发生的事情,那就太好了。我用的是Python 2.7.5,statareader来自pandas 0.12的开发记录,Python经验很少。
dr = statareader.read_stata('file.dta')
a = 2
t = 1
for t in range(1,10):
z = str(t)
for date, row in dr.iterrows():
cur.execute("INSERT INTO tblv00{} (data, recodeid_fk) VALUES({}, {})".format(z, str(row[a]),29))
a += 1
t += 1
conn.commit()
cur.close()
conn.close()
【问题讨论】:
-
永远不要像这样将值直接插入到 SQL 中,你会让自己非常容易受到 [SQL 注入](bobby-tables.com) 的攻击。此外,将来请在问题中提及您的 PostgreSQL 版本。谢谢!
-
另外,每当你看到自己在循环中使用 SQL 做某事时,想想“我怎样才能把它变成一个集合操作”。在这种情况下,我建议通过 Psycopg2 的
COPY支持使用COPY命令从生成器一次性批量插入行。
标签: python postgresql pandas