使用 cx_Oracle executemany() 从 Python 列表/字典批量插入 Oracle 数据库

遗产

我正在将数据从 Python 字典插入到 Oracle DB。我使用了游标类中的 executemany()。我收到以下错误:

ORA-01036: 非法变量名/编号

此外,当我使用 try/except for executemany() 时,我收到一个额外的错误:

cx_Oracle.DatabaseError: DPI-1010: 未连接

环境:Python:3.6.7,Oracle:12c,cx_Oracle:7.1.2,操作系统:Ubuntu

我将字典数据转换为字典列表并将其作为 executemany() 的第二个参数传递,但得到相同的错误。这是我的字典列表的样子

    [{'location': 1, 'xxx_id': 917985, 'seq': 758, 'event_time': 
    datetime.datetime(2019, 5, 5, 20, 1, 53), 'event_type': 'xxxx', 'number': 
    123, 'stop': '40305', 'x': None, 'y': None, 'arrival_time': 
    datetime.datetime(2019, 5, 5, 20, 1, 33), 'departure_time': 
    datetime.datetime(2019, 5, 5, 20, 2), 'yyy_id': 529934, 'zzz_id': 59359277}, 
   {'location': 1, 'xxx_id': 917985, 'seq': 759, 'event_time': 
   datetime.datetime(2019, 5, 5, 20, 2, 33), 'event_type': 'xxxx', 'number': 
   123, 'stop': '40301', 'x': None, 'y': None, 'arrival_time': 
   datetime.datetime(2019, 5, 5, 20, 2, 27), 'departure_time': 
   datetime.datetime(2019, 5, 5, 20, 2, 50), 'yyy_id': 529930, 'zzz_id': 59279},

   {.......},
   {.......}
   ]

尝试了来自 stackoverflow 的其他建议,但没有运气。最接近我的情况的是这个。使用 python 将字典列表插入到 SQL 表中

这是我试过的代码

    sql_insert = '''INSERT INTO TABLE_NAME (LOCATION, XXX_ID, SEQ, 
    EVENT_TIME, EVENT_TYPE, NUMBER, STOP, X, Y, ARRIVAL_TIME, DEPARTURE_TIME, 
    YYY_ID, ZZZ_ID)
    VALUES(:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13)'''

    for k1, v1 in events.items():
        list_events = []
        for k2, v2 in v1.items():
            x = dict(v2)
            # print(x)
            list_events.append(x)
            cursor = connection.cursor()
        try:
            cursor.executemany(sql_insert, list_events)
            connection.commit()
        except cx_Oracle.DatabaseError as e:
            print(e)

我正在尝试插入几千条记录。任何帮助将是非常可观的。

遗产

我的一位同事建议使用 named(eg values(:location, :peggo_id, ....) 占位符而不是编号占位符,并且它与命名占位符一起使用。虽然我不确定它是 Oracle 还是 cx_Oracle 的东西。此外,如果您在 executemany() 方法中传递字典,命名参数必须与字典中的键名完全相同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python ETL-使用cx_Oracle批量或迭代将大型数据集加载到Oracle数据库中

如何通过熊猫数据帧在cx_Oracle中使用命名绑定和批量插入(executemany)

Python cx_Oracle。用executemany()撞头

使用python连接到Oracle数据库(cx_oracle)

数据库:使用cx_oracle通过python检查数据类型

使用 cx_Oracle Cursor.executemany() 插入序列的下一个值

无法用python的cx_Oracle连接oracle远程数据库

如何使用cx_oracle django软件包连接到Oracle旧版数据库?

Python 使用 cx_Oracle 在 Oracle BD 中导入/插入 CSV(无标题)

使用python cx_oracle将数据导入到oracle

使用 cx_Oracle 将完整的 python 列表推送到 oracle db

Python Cx_Oracle; 如何使用列表作为参数执行 SQL 插入

使用cx_Oracle从Oracle提取数据时,返回空字符串代替Oracle NULL / Python无

使用cx_Oracle中csv文件中的变量更新数据库

如何使用python,cx_oracle将查询的结果集提取为字典?

CX_Oracle使用绑定变量/函数插入数据并返回记录ID

使用即时客户端通过Python3(cx_Oracle)连接到Oracle数据库时,错误“ DPI-1047:无法找到64位Oracle客户端库”

使用Python设置cx_Oracle环境变量

如何在假脱机中使用python cx_Oracle

使用cx_oracle连接到Oracle数据库会在Windows上提供DPI-1047

使用SqlAlchemy和cx_Oracle将Pandas DataFrame写入Oracle数据库时,加快to_sql()的速度

将Python字典用于CX_ORACLE的SQL INSERT语句

Python cx_oracle绑定变量和项目列表

在cx_Oracle / sqlalchemy中反映数据库表

Robot Framework 数据库连接 cx_Oracle

用cx_Oracle批量插入:数据类型不一致

使用cx_Oracle包从python环境执行的Oracle SQL查询中获取动态日期

在 ml-engine 中使用 cx_oracle 导致“无法加载 Oracle 客户端库”

python cx_Oracle 查询结束