为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:WIN10
【CPU】:64位
【问题描述】*:flask框架连接达梦数据库使用了sqlalchemy
sqlalchemy连接达梦需要dmPython作为驱动,按照文档提示把环境弄好了
python3.6.8
sqlalchemy1.3.23
sqlalchemy-dm==1.1.10
ipv4源代码如下
def get_dm_session(sql_url=None):
'''
此方法用来获取数据库连接池的session
DM_USER, DM_PASS, DM_HOST, DM_PORT,SCHEMA_NAME分别是用户、密码、地址、端口、模式名
:return: session
'''
if sql_url is None:
sql_url = 'dm+dmPython://{}:{}@{}:{}'.format(DM_USER, DM_PASS, DM_HOST, DM_PORT)
# print('sql_url:{}'.format(sql_url))
engine = create_engine(
sql_url,
pool_size=20,
pool_recycle=7200, # 连接回收时间/秒/-1永不回收,session被回收之后重新生成新连接保证不断
pool_pre_ping=True, # 预检测池中连接是否有效,并替换无效连接
pool_use_lifo=True, # 使用后进先出的方式获取连接,允许多余连接保持空闲
echo_pool=True, # 打印出连接池的异常信息
max_overflow=5 # 最大允许溢出连接池大小的连接数量
)
Session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine))
session = Session()
# 默认和用户名字一样的模式(数据库名字)
session.execute(text(f"ALTER SESSION SET CURRENT_SCHEMA = {SCHEMA_NAME}"))
return session
我如果把DM_HOST换成[2409::1111:1010.10.1]这样的ipv6地址,sqlalchemy这个源代码解析的没有错,我想是不是因为dmpython和sqlalchemy-dm的源代码中解析不对
ipv6版本代码
def get_dm_session(sql_url=None):
'''
此方法用来获取数据库连接池的session
:return: session
'''
if sql_url is None:
# sql_url = 'dm+dmPython://{}:{}@{}:{}'.format(DM_USER, DM_PASS, DM_HOST, DM_PORT)
sql_url = 'dm+dmPython://{}:{}@[2409:8034:5aff:200::18:9]:{}'.format(DM_USER, DM_PASS, DM_PORT)
# print('sql_url:{}'.format(sql_url))
engine = create_engine(
sql_url,
pool_size=20,
pool_recycle=7200, # 连接回收时间/秒/-1永不回收,session被回收之后重新生成新连接保证不断
pool_pre_ping=True, # 预检测池中连接是否有效,并替换无效连接
pool_use_lifo=True, # 使用后进先出的方式获取连接,允许多余连接保持空闲
echo_pool=True, # 打印出连接池的异常信息
max_overflow=5 # 最大允许溢出连接池大小的连接数量
)
Session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine))
session = Session()
# 默认和用户名字一样的模式(数据库名字)
session.execute(text(f"ALTER SESSION SET CURRENT_SCHEMA = {SCHEMA_NAME}"))
return session
提示如下错误
ValueError: invalid literal for int() with base 10: '8034:5aff:200::18:9:5237'
很明显dmPython和sqlalchemy-dm这个方言版本不支持ipv6地址的解析
python3.6,建议使用高版本sqlalchemy
参考一下这个https://eco.dameng.com/community/post/202203101336142JRI61ES7WK1QPF1M3