鱼C论坛

 找回密码
 立即注册
查看: 2045|回复: 5

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

[复制链接]
发表于 2023-3-15 15:15:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我需要将从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 = 'insert  into ' + sheetName + ' (' + col_name + ')' + ' values ' + '(' + a[0:len(a) - 1] + ')'

    # 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
File  sre pymssql _pymssql.pyx ,line 646, in pymssql. pymssql.connect
File  sre pymssgl  mssql.pyx ,line 2126, in pymssgl. mssgl.connect
File sre pymssgl  mssql.pyx ,line 715, in pymssql. mssql.MSSQLConneetion. __init__
ValueError: list.removelx): x not in list
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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() 方法。

如果以上方法无法解决问题,建议您提供更详细的错误信息和相关代码,以便更好地进行排查和解决。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我在执行批量插入过程中报的错,少量数据插入时没有报错,通过debug检查了一下参数都获取到了。
当我用try: except Exception as e: 捕获异常并不做处理时,后面又能继续运行
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

在论坛里搜索“图片”然后研究一下如何发图片
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-17 10:54:35 | 显示全部楼层
已解决,我在每次处理完一定的数量后休眠了10秒钟,错误就没有出现了,估计是我调用的太频繁了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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基础上,再做你需要的增删改查。




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-24 05:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表