如何解决这个错误python

时间:2014-05-09 01:51:19

标签: python postgresql python-2.7 csv

我在python中开始并想编写此脚本以将数据从csv插入postgresql表

import csv
import psycopg2
conn_string="dbname='Training'
user='admin' password='admin' "  
conn=psycopg2.connect(conn_string)  
cursor=conn.cursor() print "Connected!\n"

with open('C:\Users\Mostafa\Downloads\New folder\product.product_.csv', 'rb') as f:
 reader = csv.reader(f)
 for row in reader:
 print row
 Query="insert into product_template (name) VALUES ('"+str( row )+"') RETURNED id"
 cursor.excute(Query)
 conn.commit()
 print "Done!\n"

当我尝试运行此代码时 得到这个错误

Traceback (most recent call last):   File "D:\Code\Java\Import\src\CSV\__init__.py", line 19, in <module>
    cursor.excute(Query) AttributeError: 'psycopg2._psycopg.cursor' object has no attribute 'excute'

任何解决这个问题的想法。

2 个答案:

答案 0 :(得分:3)

我从来没有使用过python,但看起来你在方法调用中有一个拼写错误&#34; excute&#34;。

答案 1 :(得分:1)

回溯是关于代码中出错的地方的信息,特别是第19行。有问题的陈述是cursor.excute(Query),明显的错误是你应该调用execute()函数,这是一个简单的错字因此。

您的代码还有一些问题:

  1. INSERT语句有一个可选的RETURNING子句,而不是RETURNED
  2. 您似乎每行只有一个字符串,但如果您有更多,那么您应该小心使用CSV格式,因为它很灵活。尽管名称,分隔符也可能是tab字符或分号';'甚至别的什么。使用CSV的方式要求分隔符是逗号','因为这是PG在INSERT语句中所期望的。
  3. 引用字符串或不存在字符串也可能是一个问题。 PG默认情况下对字符串使用单引号('),但它也会引用双引号(“)。还要注意嵌入引号的问题(例如”不​​要“,”不能“,”我的朋友的“在你的情况下,文件中的字符串显然没有引用,你可以通过使用PG内部quote_string()函数解决嵌入式引号,该函数将双引号('')嵌入引号(并执行其他有用的操作)像阻止SQL注入的东西。)
  4. 您的代码的查询行应该看起来像这样:

    Query="INSERT INTO product_template (name) VALUES (quote_string("+str(row)+")) RETURNING id"