Python导入oracle数据的方法(共6篇)由网友“NegativeCre”投稿提供,这次小编在这里给大家整理过的Python导入oracle数据的方法,供大家阅读参考。
篇1:Python导入oracle数据的方法
作者:Sephiroth 字体:[增加 减小] 类型:
import cx_Oracle dns_tns=cx_Oracle.makedsn(“192.168.0.288”,1521,“skynet”) print dns_tns con = cx_Oracle.connect(‘alibaba‘, ‘zhimakamen‘, dns_tns) cur=con.cursor for index,line in enumerate(file(“f2.csv”)): sql=“”“insert into iq_data_B011F8286A1BA (field1,field2,field3,field4) values (”“” for fields in (line.split(“,”)): sql=sql+“‘”+fields+“‘,” cur.execute(sql[:-1]+“)”) con.commit() con.close()
希望本文所述对大家的Python程序设计有所帮助,
篇2:Oracle的imp命令导入备份数据
笔者在做项目过程中遇到以下问题,在客户提供的数据库备份文件需要导入到数据库中,以便使用,数据库为oracle 9.1.1,安装在windows server 2000 jp系统中,服务器端字符集
为japanese_japan_utf8,而客户端使用的是中文windows server 2000系统,字符集为simplified chinese_china.zhs16gbk。
在插入数据过程中出现如下问题:
c:\oracle\ora90\bin>imp scott/tiger@sdes full=y file=c:\expdat.dmp
import: release 9.0.1.1.1 - production on 星期一 1月 22 19:05:43
(c) copyright oracle corporation. all rights reserved.
连接到: oracle9i release 9.0.1.1.1 - production
jserver release 9.0.1.1.1 - production
imp-00016: 不支持要求的字符集转换(从类型830到852)
imp-00000: 未成功终止导入
使用2进制文件编辑工具,如uedit32。打开导出的dmp文件,获取2、3字节的内容,如00 01,先把它转换为10进制数,为1,使用函数nls_charset_name即可获得该字符集:
sql>select nls_charset_name(1) from dual;
nls_charset_name(1)
-------------------
us7ascii
可以知道该dmp文件的字符集为us7ascii,如果需要把该dmp文件的字符集换成zhs16gbk,则需要用nls_charset_id获取该字符集的编号:
笔者遇到的问题为830到852类型转换错误,进入oracle的sqlplus,进行以下查询:
sql>select nls_charset_name(830) from dual;
nls_charset_na
--------------
ja16euc
sql>select nls_charset_name(852) from dual;
nls_charset_name
----------------
zhs16gbk
sql>
sql>select nls_charset_id('zhs16gbk') from dual;
nls_charset_id('zhs16gbk')
--------------------------
852
把852换成16进制数,为354,把2、3字节的00 01换成03 54,即完成了把该dmp文件字符集从us7ascii到zhs16gbk的转化,这样,再把该dmp文件导入到zhs16gbk字符集的数据库就可以了。
影响oracle数据库字符集最重要的参数是nls_lang参数。它的格式如下: nls_lang = language_territory.charset .它有三个组成部分(语言、地域和字符集),每个成分控制了nls子集的特性。
其中: language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。如:american _ america. zhs16gbk .
可以使用以下命令获取字符集名称:
sql>select userenv('language') from dual;
userenv('language')
-------------------------------------------------------------------------------
simplified chinese_china.utf8
sql>
用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几m或几十m,可以用ultraedit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下sql查出它对应的字符集:
sql>select nls_charset_name(to_number('0354','xxxx')) from dual;
nls_charset_name(to_number('0354','xxxx'))
--------------------------------------------------------------------------------
zhs16gbk
sql>
03 03 3e 45 .....其中的033e就是字符集对应的值。
上文说过,dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文件的第2第3字节的内容就可以‘骗’过oracle的检查。这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我们常用的一些字符集,如us7ascii,we8iso8859p1,zhs16cgb231280,zhs16gbk基本都可以改。因为改的只是dmp文件,所以影响不大。
具体的修改方法比较多,最简单的就是直接用ultraedit修改dmp文件的第2和第3个字节。比如想将dmp文件的字符集改为zhs16gbk,可以用以下sql查出该种字符集对应的16进制代码:
sql>select to_char(nls_charset_id('zhs16gbk'), 'xxxx') from dual;
0354
然后将dmp文件的2、3字节修改为0354即可。
另外,如果dmp文件中备份的数据库表已经存在,则导入过程会失败,只能先将已经存在的表删除,在进行导入。
篇3:python链接Oracle数据库的方法
作者:秋风秋雨 字体:[增加 减小] 类型:
这篇文章主要介绍了python链接Oracle数据库的方法,实例分析了Python使用cx_Oracle模块操作Oracle数据库的相关技巧,需要的朋友可以参考下
本文实例讲述了python链接Oracle数据库的方法,分享给大家供大家参考。具体如下:
这里使用python链接Oracle数据库需要引用cx_Oracle库
#coding=UTF-8 import cx_Oracle def hello: ‘‘‘Hello cx_Oracle示例: 1)打印数据库版本信息. 2)查询表数据.‘‘‘ conn = cx_Oracle.connect(“obs61”,“obs61”,“tx8i.hp”) cur = conn.cursor() try:print “Oracle Version:%s” % conn.versionprint “Table SUB_POLICY rows:”cur.execute(‘select * from wlan_future_event‘)for row in cur: print row finally:cur.close()conn.close() hello()
希望本文所述对大家的Python程序设计有所帮助,
篇4:python实现zencart产品数据导入到magento(python导入数据)
最近更 新
python冒泡排序算法的实现代码
python笔记(2)
Python正则表达式介绍
Python中针对函数处理的特殊方法
Python入门教程 超详细1小时学会Python
Cython 三分钟入门教程
Python 字符串定义
python备份文件的脚本
测试、预发布后用python检测网页是否有日
python将多个文本文件合并为一个文本的代
热 点 排 行
Python入门教程 超详细1小时学会
python 中文乱码问题深入分析
比较详细Python正则表达式操作指
Python字符串的encode与decode研
Python open读写文件实现脚本
Python enumerate遍历数组示例应
Python 深入理解yield
Python+Django在windows下的开发
python 文件和路径操作函数小结
python 字符串split的用法分享
篇5:Oracle大批量删除数据方法数据库
批量删除海量数据通常都是很复杂及缓慢的,方法也很多,但是通常的概念是:分批删除,逐次提交, 下面是删除过程,数据表可以通过主键删除, 测试 过Delete和For all两种方法,for all在这里并没有带来 性能 提高,所以仍然选择了批量直接删除。 首先创建一下
批量删除海量数据通常都是很复杂及缓慢的,方法也很多,但是通常的概念是:分批删除,逐次提交。
下面是删除过程,数据表可以通过主键删除,测试过Delete和For all两种方法,for all在这里并没有带来性能提高,所以仍然选择了批量直接删除。
首先创建一下过程,使用自制事务进行处理:
create or replace procedure delBigTab
(
p_TableName in varchar2,
p_Condition in varchar2,
p_Count in varchar2
)
as
pragma autonomous_transaction;
n_delete number:=0;
begin
while 1=1 loop
EXECUTE IMMEDIATE
'delete from '||p_TableName||' where '||p_Condition||' and rownum <= :rn'
USING p_Count;
if SQL%NOTFOUND then
exit;
else
n_delete:=n_delete + SQL%ROWCOUNT;
end if;
commit;
end loop;
commit;
DBMS_OUTPUT.PUT_LINE('Finished!');
DBMS_OUTPUT.PUT_LINE('Totally '||to_char(n_delete)||' records deleted!');
end;
以下是删除过程及时间:
SQL>create or replace procedure delBigTab
2 (
3 p_TableName in varchar2,
4 p_Condition in varchar2,
5 p_Count in varchar2
6 )
7 as
8 pragma autonomous_transaction;
9 n_delete number:=0;
10 begin
11 while 1=1 loop
12 EXECUTE IMMEDIATE
13 'delete from '||p_TableName||' where '||p_Condition||' and rownum <= :rn'
14 USING p_Count;
15 if SQL%NOTFOUND then
16 exit;
17 else
18 n_delete:=n_delete + SQL%ROWCOUNT;
19 end if;
20 commit;
21 end loop;
22 commit;
23 DBMS_OUTPUT.PUT_LINE('Finished!');
24 DBMS_OUTPUT.PUT_LINE('Totally '||to_char(n_delete)||' records deleted!');
25 end;
26 /
Procedure created.
SQL>set timing on
SQL>select min(NUMDLFLOGGUID) from HS_DLF_DOWNLOG_HISTORY;
MIN(NUMDLFLOGGUID)
------------------
11000000
Elapsed: 00:00:00.23
SQL>exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 11100000','10000');
PL/SQL procedure suclearcase/“ target=”_blank" >ccessfully completed.
Elapsed: 00:00:18.54
SQL>select min(NUMDLFLOGGUID) from HS_DLF_DOWNLOG_HISTORY;
MIN(NUMDLFLOGGUID)
------------------
11100000
Elapsed: 00:00:00.18
SQL>set serveroutput on
SQL>exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 1100','10000');
Finished!
Totally 96936 records deleted!
PL/SQL procedure successfully completed.
Elapsed: 00:00:18.61
10万记录大约19s
SQL>exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 11300000','10000');
Finished!
Totally 100000 records deleted!
PL/SQL procedure successfully completed.
Elapsed: 00:00:18.62
SQL>exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 11400000','10000');
Finished!
Totally 100000 records deleted!
PL/SQL procedure successfully completed.
Elapsed: 00:00:18.85
SQL>
SQL>exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 13000000','10000');
Finished!
Totally 1000000 records deleted!
PL/SQL procedure successfully completed.
Elapsed: 00:03:13.87
100万记录大约3分钟
SQL>exec delBigTab('HS_DLF_DOWNLOG_HISTORY','NUMDLFLOGGUID < 20000000','10000');
Finished!
Totally 6999977 records deleted!
PL/SQL procedure successfully completed.
Elapsed: 00:27:24.69
700万大约27分钟
以上过程仅供参考.
原文转自:www.ltesting.net
篇6:如何在Oracle 10g中通过网络连接导入数据
历史上,Oracle的导入及导出功能曾采用磁盘文件作为卸载和再装载数据库的存储中介,对于较大的数据库这样“交换文件”的方式是个大问题。因为过大文件将会超过操作系统对文件大小的限制,使得导出不能实现。
一些有创新精神的数据管理员使用文件压缩功能,例如UNIX中的压缩功能,以获得交换文件的最大容量。后来版本中的导入及导出功能允许使用多种交换文件以减少限制。
在Oracle 10g中,Data Pump版的导入功能能从其他数据库实例中直接导入,从而完全删除交换文件。
第一步是定义一个数据库链接对象来识别源数据库,并提供登录资格认证,
例如,芝加哥的一个源数据库可以通过Oracle网络服务名CHI进行识别。使用者在实例中,ADMIN1,使用密码WINDY 进行登录并有权访问要导入的数据,下面的CREATE DATABASE LINK命令可以用于定义源数据库:
CREATE DATABASE LINK chicago
CONNECT TO admin1 IDENTIFIED BY windy
USING 'CHI'; Data Pump导入命令——impdp,现在能使用这一数据库链接直接访问远程数据。命令行参数NETWORK_LINK 通过数据库链接指向源数据库。在西雅图的本地数据库实例中,用户ADMIN2将会执行以下命令 (整行):
impdp admin2/market TABLES=customers,sales DIRECTORY=dpump1
NETWORK_LINK=chicago 注意第一次芝加哥实例中没有导出操作,并且操作过程中不会创建交换文件。
如果想要查询更多关于如何通过网络链接导入的问题,可参考Oracle文件设置中的Oracle Database 10g Utilities。
★ InnoDBInsert(插入)操作(下)mysql技术内幕
【Python导入oracle数据的方法(共6篇)】相关文章:
数据库工程师工作的职责2023-03-16
大数据开发工程师的主要职责精选2023-05-07
高级运维工程师的工作职责描述2024-02-12
app测试工程师的基本职责2023-03-31
计算机专业简历自我评价2022-12-18
高级实施工程师的主要职责2022-06-30
高级测试工程师岗位的主要职责精选2024-05-13
高级数据分析师的职位职责2023-12-06
数据分析师的工作内容与发展前景2022-05-07
跟踪标记全攻略数据库教程2022-09-26