python - 使用 SQLAlchemy 和 cx_Oracle 连接到 oracle 服务器
问题描述
今天我来找你是因为我想将我的 oracle localhost 服务器连接到我的脚本。所以我有以下代码:
import sqlalchemy
import cx_Oracle
connexion_string=str('oracle+cx_oracle://' + con['sql']['user'] + ':' + con['sql']['password'] + '@' + con['sql']['server'] + ':' + con['sql']['port'] + '/?service_name=' + con['sql']['database'])
try:
engine = sqlalchemy.create_engine(connexion_string)
conn = engine.connect()
except Exception as e:
print(type(e))
使用此代码,我有以下错误:
<class 'sqlalchemy.exc.DatabaseError'>
我不知道为什么它不起作用,如果有人可以帮助我,那应该很好!
我正在使用带有python 3.8.3的SQLAlchemy 1.3.18和cx_Oracle 8.0.0(它也在 3.7.6 上工作)
祝你今天过得愉快 !
解决方案
我以这种方式使用sqlalchemy
和:cx_oracle
from sqlalchemy import create_engine
import cx_Oracle
host="myhost"
port=myport
sid='myservicename'
user='myuser'
password='mypassword'
sid = cx_Oracle.makedsn(host, port, service_name=sid)
cstr = 'oracle://{user}:{password}@{sid}'.format(
user=user,
password=password,
sid=sid
)
engine = create_engine(
cstr,
convert_unicode=False,
pool_recycle=10,
pool_size=50,
echo=True,
max_identifier_length=128
)
result = engine.execute('select * from dual')
for row in result:
print (row)
C:\python>python mytest_sql.py
2020-08-12 14:14:12,136 INFO sqlalchemy.engine.base.Engine SELECT USER FROM DUAL
2020-08-12 14:14:12,137 INFO sqlalchemy.engine.base.Engine {}
2020-08-12 14:14:12,192 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60 CHAR)) AS anon_1 FROM DUAL
2020-08-12 14:14:12,192 INFO sqlalchemy.engine.base.Engine {}
2020-08-12 14:14:12,247 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS VARCHAR2(60 CHAR)) AS anon_1 FROM DUAL
2020-08-12 14:14:12,248 INFO sqlalchemy.engine.base.Engine {}
2020-08-12 14:14:12,303 INFO sqlalchemy.engine.base.Engine SELECT CAST('test nvarchar2 returns' AS NVARCHAR2(60)) AS anon_1 FROM DUAL
2020-08-12 14:14:12,304 INFO sqlalchemy.engine.base.Engine {}
2020-08-12 14:14:12,383 INFO sqlalchemy.engine.base.Engine select value from nls_session_parameters where parameter = 'NLS_NUMERIC_CHARACTERS'
2020-08-12 14:14:12,383 INFO sqlalchemy.engine.base.Engine {}
2020-08-12 14:14:12,490 INFO sqlalchemy.engine.base.Engine select * from dual
2020-08-12 14:14:12,492 INFO sqlalchemy.engine.base.Engine {}
('X',)
C:\python>
推荐阅读
- google-chrome - 如何让我的网站仅在特定浏览器上打开
- c# - 如何在 Xamarin.Forms 中为自定义组件创建可绑定命令?
- python - 根据像 z 这样的未知数求解方程组,可以在 matlab 或其他编程语言中使用一些帮助
- css - 即使在身体负载后也将页脚粘在底部
- pygame - 我的 pygame 子弹精灵每次通过循环只触发一次。想多次开火
- sql - 如何在 SQL Server 的列中获取合并错误
- java - Android语义分割后处理太慢
- reactjs - 如何在功能组件中传递接口以响应 useState?
- ios - 如何通过 modalView 在应用内购买后重新加载数据
- java - 为什么 Eclipse IDE 显示这个包含错误的 java 程序的输出?