python中运行oracle查询并将结果插入到新的oracle表中的语法是啥?

Posted

技术标签:

【中文标题】python中运行oracle查询并将结果插入到新的oracle表中的语法是啥?【英文标题】:What is the syntax in python to run a oracle query, and have the results inserted into a new oracle table?python中运行oracle查询并将结果插入到新的oracle表中的语法是什么? 【发布时间】:2022-01-08 04:42:00 【问题描述】:

我是 python 新手,但仍然不确定它的所有细节。我已经设法使用 python 在 oracle 中创建了一个新表,但现在我希望能够从以前创建的表中插入 3 个属性。

所以基本上,我的查询目前很简单,例如:

select attribute1, attribute2, attribute 3 from mytable where qc_code = 'F';

我创建的新表也有attribute1、attribute2、attribute 3作为表中唯一的属性。

抱歉,如果这个问题不清楚;我想重点是,如何使用 python 将查询结果插入另一个表。

我使用 python 的原因是因为我计划添加多个查询,但由于我还在学习,我只是想让这个工作。

谢谢。

【问题讨论】:

【参考方案1】:

不要将结果放入 python 中,然后将它们放回数据库中,因为这样效率低下。只需使用INSERT ... SELECT 语句并在数据库中进行所有处理:

INSERT INTO other_table (attribute1, attribute2, attribute3)
select attribute1,
       attribute2,
       attribute3
from   mytable
where  qc_code = 'F';

【讨论】:

【参考方案2】:

来自documentation of cx_Oracle。它显示了如何插入数据和查询数据。所以你想先查询,对数据做一些 python-magic,最后将其插入数据库。

import cx_Oracle

connection = cx_Oracle.connect(
    user="demopython",
    password="XXXXX",
    dsn="localhost/xepdb1")

print("Successfully connected to Oracle Database")

cursor = connection.cursor()

# Create a table

cursor.execute("""
    begin
        execute immediate 'drop table todoitem';
        exception when others then if sqlcode <> -942 then raise; end if;
    end;""")

cursor.execute("""
    create table todoitem (
        id number generated always as identity,
        description varchar2(4000),
        creation_ts timestamp with time zone default current_timestamp,
        done number(1,0),
        primary key (id))""")

# Insert some data

rows = [ ("Task 1", 0 ),
         ("Task 2", 0 ),
         ("Task 3", 1 ),
         ("Task 4", 0 ),
         ("Task 5", 1 ) ]

cursor.executemany("insert into todoitem (description, done) values(:1, :2)", rows)
print(cursor.rowcount, "Rows Inserted")

connection.commit()

# Now query the rows back
for row in cursor.execute('select description, done from todoitem'):
    if (row[1]):
        print(row[0], "is done")
    else:
        print(row[0], "is NOT done")

【讨论】:

以上是关于python中运行oracle查询并将结果插入到新的oracle表中的语法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何连接两个表中的数据并将结果插入到新表中?

MySQL查询结果复制到新表(更新插入)

SQL插入的唯一约束-ORACLE

如何从 Big Query cli 运行保存的查询并将结果导出到 CSV?

Oracle数据库中把select语句中查询的记录怎么批量插入数据库中?

Oracle 流水线表函数并将结果插入到 Oracle 表中