使用 python cx_oracle 将数据导入 oracle

importing data to oracle using python cx_oracle

嗨,我是 python(编程和 Whosebug)的新手。首先让我先简单介绍一下我正在做的和正在尝试做的事情。

我正在使用内部 XML API 从内部数据库中提取数据

I parse/format xml 结果为 txt 文档(自动发生在 设置间隔)

我想将此文档的内容写入或导入到oracle数据库中

我将如何将此文档导入或写入现有的 oracle 数据库?关于我用来与数据库建立连接的 cx_Oracle 模块,我似乎找不到太多文档。你们中的任何人都可以指出我完成此任务的方向/资源吗?

简短回答:

query = """
insert into TABLE(FIELD1, FIELD2, ...) values (VAL1, VAL2, ...)
"""
cur = con.cursor()
cur.execute(query)
cur.commit()

强烈建议你使用prepared statements

长答案:

这是针对 Linux,特别是针对 Red Hat。每个OS上只能使用末尾的Python代码。尝试根据您的 OS.

调整这些步骤

0:安装软件包 libaiopython-dev(或 python-devel,检查您的发行版)

1:如果没有pip,请安装

2:从 Oracle site

安装 oracle instantclient-basicinstantclient-sdk(或 instantclient-devel

3:使用 bash 启动这些命令。如果您没有 /etc/profile.d/,请检查您的发行版。

echo 'ORACLE_HOME="/usr/lib/oracle/12.1/client64"' | \
sudo tee /etc/profile.d/cx_oracle.sh

pip install cx_Oracle

4: 注销并重新登录

5:在使用cx_Oracle之前,您必须设置LD_LIBRARY_PATH我建议您不要全局设置:

export LD_LIBRARY_PATH="$ORACLE_HOME/lib"

6:最后,Python代码:

import cx_Oracle

os.environ["NLS_LANG"] = "AMERICAN_AMERICA.UTF8"
con_str = "USERNAME/PASSWORD@HOST:PORT/DBNAME"
con = cx_Oracle.connect(con_str)

query = """
select 1 from dual
"""
cur = con.cursor()
cur.execute(query)
rows = cur.fetchall()

for row in rows:
    print(row) # it should print "1"

con.close()

您必须使用您的用户名、密码等更改 con_str。设置 utf-8 编码的行是可选的,可根据您的需要进行调整,但建议使用。

7:如果要插入行:

query = """
insert into TABLE(FIELD1, FIELD2, ...) values (VAL1, VAL2, ...)
"""
cur = con.cursor()
cur.execute(query)
cur.commit()

强烈建议你使用prepared statements如果你不能相信数据的来源。

来源:

  1. http://chilipuppy.blogspot.it/2008/10/purpose-im-working-on-building-python.html
  2. http://agiletesting.blogspot.it/2005/05/installing-and-using-cxoracle-on-unix.html
  3. http://cx-oracle.readthedocs.org/en/latest/index.html
  4. 个人问题

你的问题基本上是"how do I get started with cx_Oracle?"

这里有一些片段:

http://markharrison.net/cx-oracle-demos

最简单的 cx_Oracle 程序是这样的:

import cx_Oracle
conn = cx_Oracle.connect('scott/tiger')
curs = conn.cursor()

curs.execute('select 2+2 from dual')
print curs.fetchall()

curs.execute('insert into mytable(x) values(3)')
conn.commit()

curs.execute('select * from mytable')
for row in curs:
    print row

conn.close()