我在数据库中有一个表,其中一列同时包含名字和名字(按空格分隔)。
我正在尝试加载这些数据,拆分每一行并将其再次保存到表中。可以显示该数据,但是当我尝试将其保存回去时,我会得到
“ NoneType”对象没有属性“ split”。
import sys, os, pyodbc
conn_str = (
r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
r'DBQ=C:/Users/vlcek/Desktop/pokusdb.accdb;'
)
connection = pyodbc.connect(conn_str)
cursor = connection.cursor()
cursor2 = connection.cursor()
sql="Select whole_name from people"
cursor.execute(sql)
for change in cursor:
devided=change[0].split()
print(devided[0]+"--"+devided[1])
sql2="Insert into people (user_id, Name, Surname) values (27, ?,?)"
cursor2.execute(sql2,(devided[0],devided[1]))
connection.close()
如果没有这两行的话就可以正常工作,并且我可以在控制台中显示数据,因此这两行有问题:
sql2="Insert into people (user_id, Name, Surname) values (27, ?,?)"
cursor2.execute(sql2,(devided[0],devided[1]))
我也尝试创建两个connection.cursor对象,但是即使我只是使用它也无法工作
cursor = connection.cursor()
谢谢您的建议,
瓦茨拉夫
答案 0 :(得分:1)
问题很可能是您在单个连接上保持两个游标处于打开状态。尝试获取第一个查询rows = cursor.execute(sql).fetchall()
的所有行,然后对其进行迭代。
您可以通过运行以下命令检查这是否是问题的根源(如建议here):
how_many = connection.getinfo(pyodbc.SQL_MAX_CONCURRENT_ACTIVITIES)
print(how_many)
答案 1 :(得分:0)
因此很不幸,fetchall()也不起作用。这终于是我的解决办法
import sys, os, pyodbc, copy
conn_str = (
r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
r'DBQ=C:/Users/vlcek/Desktop/pokusdb.accdb;'
)
connection = pyodbc.connect(conn_str)
cursor = connection.cursor()
sql="Select whole_name from people"
cursor.execute(sql)
mylist1=list(cursor)
mylist2=copy.deepcopy(mylist1)
for change in mylist2:
devided=change[0].split()
print(devided[0]+"--"+devided[1])
sql2="Insert into people (user_id, Name, Surname) values (27, ?,?)"
cursor.execute(sql2,(devided[0],devided[1]))
connection.commit()
connection.close()
所以我:
但是还是谢谢您的帮助。
瓦茨拉夫