[使用python将表从Oracle加载到MYSQL

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

下面的代码尝试将行从Source(Oracle)加载到Target(MYSQL)

for row in source_cursor:
        target_cursor.execute("INSERT INTO JOB (SUBJECT_AREA,WORKFLOW_NAME,VERSION_NUMBER,SUBJECT_ID,WORKFLOW_ID,WORKFLOW_RUN_ID,WORKLET_RUN_ID,CHILD_RUN_ID,INSTANCE_ID,INSTANCE_NAME,TASK_ID,TASK_TYPE_NAME,TASK_TYPE,START_TIME,END_TIME,RUN_ERR_CODE,RUN_ERR_MSG,RUN_STATUS_CODE,TASK_NAME,TASK_VERSION_DECIMAL,SERVER_ID,SERVER_NAME)   VALUES(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18,:19,:20,:21,:22)",(row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19], row[20],row[21]))

错误

 File "/usr/local/lib/python2.7/site-packages/MySQLdb/cursors.py", line 187, in execute
    query = query % tuple([db.literal(item) for item in args])
TypeError: not all arguments converted during string formatting

请提出建议

python mysql sql oracle mysql-python
1个回答
1
投票
在Python中,尽管所有人都努力遵守PEP 249,但没有两个DB-API完全相同,尤其是在参数实现方面。具体来说,虽然模块cxOracle支持任意占位符,例如编号序列cxOracle:1:2等。模块:3仅支持MySQLdbMySQLdb参数样式。

因此,请相应地调整准备的SQL语句。另外,考虑%s通过列表(%(name)s)动态写入占位符,避免长时间未编号的写出,并考虑format避免循环。

["%s", "%s", %s", ...]

但是如果您使用的是循环,只需传递行[[itself
而不解压其每个元素或使用索引到所需的位置:

executemany

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