相关疑难解决方法(0)

将大熊猫(字符串/对象)列另存为Oracle DB中的VARCHAR而不是CLOB(默认行为)

我正在尝试将数据帧传输到oracle数据库,但是传输时间太长,因为变量的数据类型在oracle中显示为clob。但是我相信,如果我将数据类型从clob转换为带有填充0的9位字符串,则不会花费那么多时间。数据是

product
000012320
000234234
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以将此变量的数据类型更改为9位数字的字符串。因此,oracle不会将其视为CLOB对象。我已经尝试了以下。

df['product']=df['product'].astype(str)
Run Code Online (Sandbox Code Playgroud)

还是有其他东西可能会减慢从python到oracle的传输?

python dataframe python-3.x pandas

4
推荐指数
1
解决办法
2512
查看次数

使用SqlAlchemy和cx_Oracle将Pandas DataFrame写入Oracle数据库时加速to_sql()

使用pandas dataframe的to_sql方法,我可以很容易地将少量行写入oracle数据库中的表:

from sqlalchemy import create_engine
import cx_Oracle
dsn_tns = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<host>)(PORT=1521))\
       (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=<servicename>)))"
pwd = input('Please type in password:')
engine = create_engine('oracle+cx_oracle://myusername:' + pwd + '@%s' % dsn_tns)
df.to_sql('test_table', engine.connect(), if_exists='replace')
Run Code Online (Sandbox Code Playgroud)

但是对于任何常规大小的数据帧(我的有60k行,不是那么大),代码变得无法使用,因为它在我愿意等待的时间内(从而超过10分钟)从未完成.我用Google搜索并搜索了几次,最接近的解决方案是ansonw这个问题中给出的答案.但那个是关于mysql,而不是oracle.正如Ziggy Eunicien指出的那样,它对甲骨文不起作用.有任何想法吗?

编辑

以下是数据框中的行示例:

id          name            premium     created_date    init_p  term_number uprate  value   score   group   action_reason
160442353   LDP: Review     1295.619617 2014-01-20  1130.75     1           7       -42 236.328243  6       pass
164623435   TRU: Referral   453.224880  2014-05-20  0.00        11          NaN     -55 38.783290   1       suppress
Run Code Online (Sandbox Code Playgroud)

这是df的数据类型:

id               int64
name             object …
Run Code Online (Sandbox Code Playgroud)

oracle performance sqlalchemy dataframe pandas

2
推荐指数
1
解决办法
6908
查看次数