2013-04-10 24 views
1

我已经为Python 3.2安装了pyODBC,并试图更新我创建的SQL Server 2008 R2数据库作为测试。pyODBC和SQL Server 2008和Python 3

我没有问题检索数据,并一直工作。

但是,当程序执行cursor.execute(“sql”)来插入或删除一行时,它不起作用 - 没有错误,什么都没有。答案就好像我成功地更新了数据库,但没有反映出变化。

下面的代码基本上是建立一个字典(我对这个后来的计划),只是做SQL INSERT语句的快速构建(其中工程,我想知道我写的日志条目)

我在我的表中有11行,Killer,即使在提交后也没有受到影响。

我知道这是愚蠢的东西,但我看不到它。

下面是代码:

cnxn = pyodbc.connect('DRIVER={SQL Server Native Client 10.0};SERVER=PHX-500222;DATABASE=RoughRide;UID=sa;PWD=slayer') 
cursor = cnxn.cursor() 

# loop through dictionary and create insert entries 
logging.debug("using test data to build sql") 
for row in data_dictionary: 
    entry = data_dictionary[row] 
    inf = entry['Information'] 
    dt = entry['TheDateTime'] 
    stat = entry['TheStatus'] 
    flg = entry['Flagg'] 
    # create sql and set right back into row 
    data_dictionary[row] = "INSERT INTO Killer(Information, TheDateTime, TheStatus, Flagg) VALUES ('%s', '%s', '%s', %d)" % (inf, dt, stat, flg) 

# insert some rows 
logging.debug("inserting test data") 
for row in data_dictionary.values(): 
    cursor.execute(row) 

# delete a row 
rowsdeleted = cursor.execute("DELETE FROM Killer WHERE Id > 1").rowcount 
logging.debug("deleted: " + str(rowsdeleted)) 

cnxn.commit 

回答

4

假设这是不是在后一个错字,看起来像你只是缺少括号中Connection.commit()方法:

... 
# delete a row 
rowsdeleted = cursor.execute("DELETE FROM Killer WHERE Id > 1").rowcount 
logging.debug("deleted: " + str(rowsdeleted)) 

cnxn.commit() 
+0

谢谢!! !太有趣了,我正盯着我的问题 - 有趣的是,没有任何来自Python解析器的警告或抱怨,cnxn.commit不是一个属性,而是一个函数。再次感谢! – Tab 2013-04-10 21:05:56

+0

@Tab如果你通过脚本运行没有任何消息,但它会在解释器中打印出对象的字符串表示形式 – Bryan 2013-04-10 21:09:08

+0

在这里我正在WingIDE内运行 - .NET是我最后一个平台,所以这是一个相当过渡。 – Tab 2013-04-10 21:17:37