247113469 发表于 2023-3-15 15:15:05

python使用mssql库时,创建connect对象报错ValueError

我需要将从xml中解析出来的数据批量插入到sqlServer数据库中,在做批量插入时报错“ValueError: list.removelx): x not in list”。
在网上找了一圈没有相关的解决方法,希望有大佬赐教

代码如下
#从配置文件中获取数据库连接信息
    comfig=r'comfig\mssql.xml'
    root = ET.parse(comfig).getroot()
    server =root.find('server').text
    user =root.find('user').text
    password =root.find('password').text
    database =root.find('database').text

    col_name = ','.join(col_name_list)
    a = ''
    print(sheetName)
    for i in col_name_list:
      a = a + '%s' + ','
      # print(i)

    sql = 'insertinto ' + sheetName + ' (' + col_name + ')' + ' values ' + '(' + a + ')'

    # print(sql)

   insert_date =pyMssql(server, user, password, database)
   insert_date.list_insert(sql, col_data_list)
错误信息:
self. connect = pymssql.connect(self. server, self.user, self.passwordself.database, a
Filesre pymssql _pymssql.pyx ,line 646, in pymssql. pymssql.connect
Filesre pymssglmssql.pyx ,line 2126, in pymssgl. mssgl.connect
File sre pymssglmssql.pyx ,line 715, in pymssql. mssql.MSSQLConneetion. __init__
ValueError: list.removelx): x not in list

isdkz 发表于 2023-3-15 16:28:25

根据您提供的代码和错误信息,似乎是在创建数据库连接时出现了问题。错误提示中指出,“ValueError: list.removelx): x not in list”,表明是在删除列表中的某个元素时发生了错误,而这个错误可能是由于传入的参数不在列表中造成的。

根据您的代码,似乎是在执行以下代码时出现了错误:

insert_date = pyMssql(server, user, password, database)
建议您检查以下几点:

确认 pyMssql 是一个有效的数据库连接类,并且该类的构造函数参数与您传入的参数一致。

检查您传入的参数 server、user、password 和 database 是否正确。您可以打印这些参数来进行检查。

确认您的数据库连接信息是正确的,您可以尝试使用其他方式来创建数据库连接,例如使用 pymssql.connect() 方法。

如果以上方法无法解决问题,建议您提供更详细的错误信息和相关代码,以便更好地进行排查和解决。

247113469 发表于 2023-3-16 10:02:45

isdkz 发表于 2023-3-15 16:28
根据您提供的代码和错误信息,似乎是在创建数据库连接时出现了问题。错误提示中指出,“ValueError: list.r ...

我在执行批量插入过程中报的错,少量数据插入时没有报错,通过debug检查了一下参数都获取到了。
当我用try: except Exception as e: 捕获异常并不做处理时,后面又能继续运行{:5_99:}
pyMssql类:
class pyMssql:
    def __init__(self, server, user, password, database):
      self.server = server
      self.user = user
      self.password = password
      self.database = database
      self.connect = pymssql.connect(self.server, self.user, self.password, self.database)
      self.cursor = self.connect.cursor()


    # executemany 批量插入时使用
    def list_insert(self, sql, list_param):
      try:
            print(sql)
            print(list_param)
            self.cursor.executemany(sql, list_param)
            print('添加成功')
      except Exception as e:
            print(e)
      finally:
            self.cursor.close()
            self.connect.close()
---------------------------------------------------------------------------------------------------------------------------
debug:
C:\Users\Ann\Desktop\1678931181731.jpg

歌者文明清理员 发表于 2023-3-16 22:13:32

247113469 发表于 2023-3-16 10:02
我在执行批量插入过程中报的错,少量数据插入时没有报错,通过debug检查了一下参数都获取到了。
当我用t ...

在论坛里搜索“图片”然后研究一下如何发图片

247113469 发表于 2023-3-17 10:54:35

已解决,我在每次处理完一定的数量后休眠了10秒钟,错误就没有出现了,估计是我调用的太频繁了{:5_99:}

阿奇_o 发表于 2023-3-17 19:55:33

本帖最后由 阿奇_o 于 2023-3-17 19:56 编辑

对象设计有问题,pyMssql类是你自定义的,然后你
   insert_date =pyMssql(server, user, password, database)
   insert_date.list_insert(sql, col_data_list)
这意味着你 对每条/每批插入的数据,都进行创建一个实例连接,因为你设计pyMssql类时,是这样设计的。。
self.connect = pymssql.connect(self.server, self.user, self.password, self.database)
所以,当过多且频繁的执行时,就容易出问题。。

改进:重构代码,可以只创建和使用一个 数据库实例对象,如 global_conn = pymssql.connect(...)   这此global_conn基础上,再做你需要的增删改查。




页: [1]
查看完整版本: python使用mssql库时,创建connect对象报错ValueError