相关疑难解决方法(0)

使用SQLALCHEMY连接到Oracle数据库

我能够成功连接到sqlite数据库并使用下面的命令集访问特定的表.

from sqlalchemy import create_engine, MetaData, Table, and_

from sqlalchemy.sql import select

from pandas import DataFrame 

db = create_engine('sqlite:///path\\database.db')

metadata = MetaData(db)

table = Table('table name', metadata, autoload=True)
Run Code Online (Sandbox Code Playgroud)

我可以使用cx_Oracle库从oracle数据库中获取数据.

但是,当我尝试连接到sqlalchemy中的Oracle数据库时,我收到以下错误

NoSuchTableError: <table name>
Run Code Online (Sandbox Code Playgroud)

我使用了以下命令:

db = create_engine('oracle://username:password@hostname:1521/instance name',echo='debug')

md = MetaData(bind=db)

t = Table('table name', md, autoload=True,schema='schema name')
Run Code Online (Sandbox Code Playgroud)

当我使用以下命令

t= Table('table name', md, autoload=True,oracle_resolve_synonyms=True)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

AssertionError: There are multiple tables visible to the schema, you must specify owner
Run Code Online (Sandbox Code Playgroud)

能否请您理解我哪里错了.

谢谢,

罗希特

sqlalchemy

10
推荐指数
3
解决办法
2万
查看次数

使用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
查看次数

标签 统计

sqlalchemy ×2

dataframe ×1

oracle ×1

pandas ×1

performance ×1