首页 > 解决方案 > 从 oracle 表中检索与 csv 文件中的 ID 有关的记录时出错

问题描述

我想将 ID(在 sampledata.csv 中)作为 SQL 查询中的参数传递,并从 Oracle 表中获取 ID 和相应的 CREATED_TIME。

sampledata.csv(我在原始文件中有超过 5K 条记录)

ID
909650124
905901916
908667528
907963151
908610211
907671207
909164586
905595841
908785942
908785942

数据库表数据

ID  CREATED_DATE
909650124   03/18/2019 04:37:43 PM
905901916   03/15/2019 11:20:55 PM
908667528   03/15/2019 02:37:16 PM
907963151   03/08/2019 03:19:09 PM
908610211   03/08/2019 03:06:17 PM
907671207   03/07/2019 01:06:58 AM
909164586   03/06/2019 01:42:20 AM
905595841   03/04/2019 11:24:31 PM
908785942   03/03/2019 10:09:40 PM
908785942   03/01/2019 07:51:51 AM

我尝试使用 Toad 使用简单的 SQL 语句获取数据,但记录超过 10K,我想自动化它。

first.py 脚本

import os
import csv
import cx_Oracle

conn = cx_Oracle.connect(user='USER_NAME', password='USER_PASSWORD', dsn=r'DSN_STRING')
db = conn.cursor()

def main():

    f = open("sampledata.csv")
    reader = csv.reader(f)

    for id in reader:
        db.execute("SELECT id, created_date FROM userdata_table WHERE merch_order_id = :id",
                     {'id': id})
        print(f"{id}  {created_date}")

    conn.close()

if __name__ == "__main__":
    main()

second.py 脚本

import os
import csv

import cx_Oracle

from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker

engine = create_engine(r'oracle+cx_oracle://USER_NAME:USER_PASSWORD@DSN_STRING'))
db = scoped_session(sessionmaker(bind=engine))

def main():

    f = open("sampledata.csv")
    reader = csv.reader(f)
    print(reader)

    for id in reader:
        db.execute("SELECT id, created_date FROM userdata_table WHERE id = :id",{'id': id})
        print(f"{id}  {created_date}")

if __name__ == "__main__":
    main()

在上面的代码中,我尝试读取 CSV 文件中的 ID,然后将 ID 传递到 SQL 语句中,但出现以下错误。有人可以帮助我了解问题出在哪里以及如何纠正吗?

==================================================== ================

cx_Oracle.DatabaseError: ORA-01484: 数组只能绑定到 PL/SQL 语句

标签: pythonsqloracle

解决方案


推荐阅读