问题:报错ImportError: libodbc.so.2: cannot open shared object file: No such file or directory
或报错('IM002', '[IM002] unixODBCData source name not found, and no default driver specified (0) (SQLDriverConnect)')

解决:
1、连接方法
sqlalchemy连接sqlserver需要使用到pyodbc模块

pip install pyodbc==5.1.0

调用方法

create_engine("mssql+pyodbc://{user}:{password}@{host}:{port}/{database}?driver=ODBC+Driver+17+for+SQL+Server".format(**db_config))

2、报错原因
ODBC驱动程序没有安装或正在配置

阅读全文

问题:报错DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory

解决:
1、连接方法
sqlalchemy连接oracle需要使用到cx_Oracle模块

pip install cx-Oracle==8.3.0

调用方法

create_engine("oracle+cx_oracle://{user}:{password}@{host}:{port}".format(**db_config))

2、报错原因
因为连接oracle需要在sqlalchemy所在的服务器安装Oracle Instant Client

阅读全文

问题:生产环境查询时报错:sqlalchemy.exc.DatabaseError: (dmPython.DatabaseError) [CODE:-608]请求执行超时

解决:因为两表查询,查询条件中有in,所以导致查询超时,但在开发环境不会出现这问题,不知道是不是达梦数据库版本问题,解决方法,将两表查询改成两个查询

阅读全文

问题:使用达梦管理工具删除表时报锁超时

解决:删除涉及的session

方法:

1、查询所有session

select * from v$sessions;

2、根据结果,找到相应的sess_id,然后删除此session

SP_CLOSE_SESSION(140359600702024);

拓展:

1、导入数据时,一直卡着不动,可能只是因为锁住了

2、程序中一条sql语句,在开发环境可以正常运行,但在生产环境,运行多次后会报错sqlalchemy.exc.DatabaseError: (dmPython.DatabaseError) [CODE:-608]请求执行超时,也可能是因为此sql语句被锁住了

问题:达梦库,sqlalchemy中非主键使用自增时,会报错

解决:在sqlalchemy中指定自增列为主键

方法:

class User(Base, BaseMixin):

__tablename__ = "YH"
# 使用mysql时,BH字段可以使用unique=True代替primary_key=True,
# 但达梦必须指定为primary_key=True,但建表时此字段还是唯一索引
BH = Column(Integer, primary_key=True, autoincrement=True)
BM = Column(String(19), nullable=False, primary_key=True)