Python Cx_oracle:executemany 抛出类型错误

问题描述 投票:0回答:1

我想使用 Cx_Oracle 中的 executemany 方法将字典列表上传到我的数据库。如果我使用该方法,它会抛出错误期望字符串或字节对象期望日期或日期时间。我知道这意味着我的数据类型可能存在问题,但这就是它变得棘手的地方。如果我将列表切成小块,我可以确定当我运行以下词典的方法时会出现错误,即:

def send_data(connection , rows):
    try:
        print((rows[23:25]))
        with connection.cursor() as cursor:
            cursor.executemany("""insert into debtors(bankruptID,category,lastname,firstname,patronymicname,fullname,inn,snils,ogrn,region,address,birthdate,birthplace,guid,uploadBatchId ) values (:bankruptID,:category,:lastname,:firstname,:patronymicname,:fullname,:inn,:snils,:ogrn,:region,:address,:birthdate,:birthplace,:guid,:uploadBatchId)
        """, rows[23:25])
            connection.commit()

这是这两本词典:

[{'bankruptID': 140167, 'category': 'SimplePerson', 'lastname': 'ТЕСТОВА', 'firstname': 'ВАРВАРА', 'patronymicname': 'ПЕТРОВНА', 'fullname': 'ТЕСТОВА ВАРВАРА ПЕТРОВНА', 'inn': '', 'snils': '00000002207', 'ogrn': '', 'region': 'г. Москва', 'address': 'город Москва, улица Весенняя, дом 5 квартира 15', 'birthdate': datetime.datetime(1990, 1, 1, 0, 0), 'birthplace': 'город Москва', 'guid': '65398489B29F3A8B4B14928AFFC6CD91', 'uploadBatchId': '513013af-f80b-4c40-a5ed-54365caf12a7'}, 

{'bankruptID': 1490, 'category': 'SimpleOrganization', 'lastname': '', 'firstname': '', 'patronymicname': '', 'fullname': 'Закрытое акционерное общество "Залегощь-Сахар"', 'inn': '5709003233', 'snils': '', 'ogrn': '1025701655869', 'region': 'Орловская область', 'address': 'Орловская область, пгт. Залегощь, ул. М.Горького д. 87а', 'birthdate': '', 'birthplace': '', 'guid': '3D8707308FDA492A29E4E222534F210E', 'uploadBatchId': '513013af-f80b-4c40-a5ed-54365caf12a7'}]

如果我单独使用 executemany 与其中任何一个(

[rows[23:24]]
[(rows[24:25]]
),错误就会消失。即使我使用一个循环来遍历每本字典并使用 execute 将它们逐一上传,这一切都很好并且不会报告错误。

我想也许它需要一个元组列表,但它也无济于事。

python cx-oracle
1个回答
0
投票

在 Cx_Oracle 中使用 executemany 时遇到的错误与您尝试插入 Oracle 数据库的值的数据类型有关。

executemany 需要一个字典序列,其中字典的键对应于 SQL 语句中的绑定变量。您尝试插入的字典中的一个或多个值似乎属于意外类型。

© www.soinside.com 2019 - 2024. All rights reserved.