所以我有这个Python文件( dosql.py ):
import sys
import psycopg2
class doSql(object):
#attributes
_cxn = ""
_cur = ""
errmsg =""
#methods
def __init__(self): #constructor
self._cxn = psycopg2.connect("dbname='postgres' user='postgres' password='4scoreand7yearsago' host='127.0.0.1' port='5432'")
self._cur = self._cxn.cursor()
def __del__(self): #destructor
self._cur.close()
self._cxn.close()
def execqry(self, sql, apply_):
rows = []
try:
self._cur.execute(sql)
rows = self._cur.fetchall()
if apply_:
self._cxn.commit()
if self._cur.rowcount == 0:
rows.append(['None'])
except:
#errmsg = sys.exc_type + ":" + sys.exc_value
errmsg = str(sys.exc_info()[1])
rows.append([errmsg])
return rows
在pgAdmin中通过查询工具,我已经有一个表格,其中包含数据库“ postgres ”中的预定义数据。
CREATE TABLE misc (
id int primary key,
col1 text,
col2 text
);
INSERT INTO misc VALUES (1, 'yes', 'i', 'entered');
在cmd中,我尝试在Python解释器中执行(相对于文件目录):
>>> execfile('dosql.py')
>>> a = doSql()
>>> i = a.execqry("SELECT * FROM misc", False)
>>> print i
[(1, 'yes', 'i', 'entered')]
>>> f = a.execqry("INSERT INTO misc VALUES (2, 'please', 'just', 'enter')", True)[0][0]
>>> print f
no results to fetch
>>> g = a.execqry("SELECT * FROM misc", False)
>>> print g
[(1, 'yes', 'i', 'entered'), (2, 'please', 'just', 'enter')]
但是当我去检查pgAdmin并浏览表格时,它不会更新为2行,仍然只有1,([1,'是','我','输入' ']数据)。
这是否意味着 self._cxn.commit()不起作用?此外,当我尝试再次重做整个过程,然后通过 del a 初始化析构函数时,仍然无效,没有更新的表。
请帮忙吗?
答案 0 :(得分:0)
False
参数的代码传递apply_
;结果没有commit
来电。
a.execqry("INSERT INTO ......", False)
^^^^^
尝试使用True
参数的代码。