需要使用使用 SQLAlchemy 的 Python 连接到 Oracle。我需要使用 oracledb 包。 使用代码来自 Github
import os
import oracledb
from sqlalchemy import create_engine
from sqlalchemy import text
print (oracledb.__file__)
username = os.environ.get("PYTHON_USERNAME")
password = os.environ.get("PYTHON_PASSWORD")
cp = oracledb.ConnectParams()
cp.parse_connect_string(os.environ.get("PYTHON_CONNECTSTRING"))
thick_mode = None
engine = create_engine(
f'oracle+oracledb://{username}:{password}@{cp.host}:{cp.port}/?service_name={cp.service_name}',
thick_mode=thick_mode)
stmt = 'SELECT UNIQUE CLIENT_DRIVER FROM V$SESSION_CONNECT_INFO WHERE SID = SYS_CONTEXT(''USERENV'', ''SID'')'
with engine.connect() as connection:
print(connection.scalar(text(stmt)))
.env 文件包含
PYTHON_USERNAME="scott"
PYTHON_PASSWORD="tiger"
PYTHON_CONNECTSTRING="192.168.1.3:1521/orclpdb"
我看到的错误如下:
C:\Users\HI>C:\Users\HI\AppData\Local\Programs\Python\Python312\python.exe "C:\Users\HI\Desktop\New folder\streamlit\langchain\sa-pydb.py"
C:\Users\HI\AppData\Local\Programs\Python\Python312\Lib\site-packages\oracledb\__init__.py
Traceback (most recent call last):
File "C:\Users\HI\Desktop\New folder\streamlit\langchain\sa-pydb.py", line 13, in <module>
cp.parse_connect_string(os.environ.get("PYTHON_CONNECTSTRING"))
File "C:\Users\HI\AppData\Local\Programs\Python\Python312\Lib\site-packages\oracledb\connect_params.py", line 666, in parse_connect_string
self._impl.parse_connect_string(connect_string)
File "src\\oracledb\\impl/base/connect_params.pyx", line 551, in oracledb.base_impl.ConnectParamsImpl.parse_connect_string
TypeError: descriptor 'strip' for 'str' objects doesn't apply to a 'NoneType' object
以下是软件包的版本。
C:\Users\HI>pip show sqlalchemy
Name: SQLAlchemy
Version: 2.0.28
C:\Users\HI>pip show oracledb
Name: oracledb
Version: 2.0.1
什么是可行的解决方案?
您遇到的问题是环境变量
PYTHON_CONNECT_STRING
未设置。因此,您会得到值 None
,但在调用 cp.parse_connect_string()
时不起作用。您可以使用此代码确认:
cp = oracledb.ConnectParams()
cp.parse_connect_string(os.environ["PYTHON_CONNECTSTRING"])
您应该获得
KeyError
例外。您正在使用的技术应该可以正常工作!