从查询列中分割字符串并将结果插入到同一个选项卡中

2024-06-09 16:51:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我在数据库中有一个表,其中一列包含第一个名称和第二个名称(除以空格)。

我试图加载这些数据,将每一行拆分并再次保存到表中。可以这样显示数据,但是当我试图将数据保存回时,我得到

'NoneType' object has no attribute '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()

如果没有这两行,如果可以正常工作,我可以在控制台中显示数据,因此这两行中存在问题:

^{pr2}$

我也试着创造了两个连接.cursor对象,但即使我只是在工作

^{pr3}$

谢谢你的建议

瓦克拉夫


Tags: 数据名称executesqlconnectionconnchangepeople
2条回答

问题很可能是您在一个连接上保持两个游标打开。尝试获取第一个查询rows = cursor.execute(sql).fetchall()的所有行,然后迭代这些行。在

您可以通过运行以下命令来检查这是否是问题的罪魁祸首(如建议的here):

how_many = connection.getinfo(pyodbc.SQL_MAX_CONCURRENT_ACTIVITIES)
print(how_many)

所以不幸的是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()

所以我:

  1. 已将光标复制到列表->;mylist1=列表(cursor)
  2. 深入复制列表->我的列表2=复制.deepcopy(我的列表1)
  3. 在那个被复制得很深的列表中迭代
  4. 我也失踪了连接.提交()结尾处

不过还是要谢谢你的帮助。在

瓦茨拉夫

相关问题 更多 >