此代码只在DB中写入一行
我发现此代码中没有错误。 。
但是为什么这不插入超过第一行?
def transremovechars():
cur.execute('drop table transforms')
char_cfg = config.get('Transform_Variables', 'Chars_to_be_removed') #Reads all the special chars to be removed from specialchars.txt#
cur.execute('select * from originallist')
for row in cur: #Applies transformation to remove chars for each row in a loop#
company = row[0]
for specialchars in char_cfg:
company = company.replace(specialchars, '')
cur.execute('Insert into transforms (Transresult1) values (\'' + company + '\')')
con.commit()
答案 0 :(得分:2)
您忘记了cur.fetchall()
:
def transremovechars():
cur.execute('drop table transforms')
char_cfg = config.get('Transform_Variables', 'Chars_to_be_removed') #Reads all the special chars to be removed from specialchars.txt#
cur.execute('select * from originallist')
for row in cur.fetchall(): #Applies transformation to remove chars for each row in a loop#
company = row[0]
for specialchars in char_cfg:
company = company.replace(specialchars, '')
cur.execute('Insert into transforms (Transresult1) values (\'' + company + '\')')
con.commit()
答案 1 :(得分:1)
在使用之前,您似乎放弃了表transforms
。你确定要的吗?或者您可能忘记显示再次创建它的代码?
如果您只使用第1列,则select *
可能会过度杀伤。也许您想在SELECT
。
此外,您应该用
替换INSERT行cur.execute('Insert into transforms (Transresult1) values (?)', company)
然而,迭代光标应该没问题。也许您可以在print
循环中插入一些for
语句...
答案 2 :(得分:1)
评论你应该cur.fetchall()
并迭代它将会起作用并且没问题。您的代码中的真正错误是,一旦您使用cur
进行插入,它就是一个“新事物”并且原始生成器被重置(cur具有next()
)方法。
您可以根据需要使用cur而不进行fetchall,只需创建第二个游标ins_cur = con.curson()
并使用它们。通过迭代或使用在一个连接上打开的多个游标,可以实现更多高级效果。
是的,请为您的dbapi模块使用正确的variable binding。