【发布时间】:2018-04-18 22:39:04
【问题描述】:
在我陈述问题之前,让我陈述一下围绕这个问题使用的设置:
Compile-time settings (established with the "configure" script)
Version: freetds v0.95.81
freetds.conf directory: /etc
MS db-lib source compatibility: yes
Sybase binary compatibility: yes
Thread safety: yes
iconv library: yes
TDS version: 4.2
iODBC: no
unixodbc: yes
SSPI "trusted" logins: no
Kerberos: yes
OpenSSL: no
GnuTLS: yes
- SQLAlchemy 版本 1.1.13
- 连接到 MS SQL Server 2008。
问题描述:
我在数据库中有一个如下所示的表:
DNA Sequence
id (int, primary key)
NTSequence (varchar(max))
在 SQLAlchemy 模型中,表的表示方式如下:
class DNAPtsSeq(Base):
id = Column("DNAPartsSequenceID", Integer, primary_key=True)
nt_seq = Column("NTSequence", VARCHAR('max'))
我像这样连接到数据库:
prod_eoi_engine = create_engine(
"mssql+pyodbc://someuser:somepw@somehost:1234/EOI?driver=FreeTDS")
这就是我连接数据库的方式:
def set_con(engine):
# Create a db session outside of the ORM that we can roll back
connection = engine.connect()
# bind db.session to that connection, and start a nested transaction
session = Session(bind=connection)
session.autoflush = True
return session
当我使用以下 SQLAlchemy 查询来查询数据库时:
dna_pts_seq = db_s.query(DNAPtsSeq).filter(DNAPtsSeq.nt_seq ==
nt_seq).first()
我在特定情况下遇到了问题。
如果 nt_seq 超过 2000 bp,我会收到以下错误:
ProgrammingError}(pyodbc.ProgrammingError) ('42000', '[42000] [FreeTDS][SQL
Server]The data types varchar(max) and ntext are incompatible in the equal
to operator. (402)
如果 nt_seq 达到 2000 bp,则一切正常。
我不知道为什么会收到此错误,需要帮助来解决它。我一直在努力寻找解决方案,但没有找到答案,非常感谢您的帮助。
即使主题相似,以下主题也未提供答案:
OLEDB comparison problem nvarchar against ntext (SQLServer 2005)
注意:我试图在 python 代码中不使用直接 SQL 语句,否则强制转换可能是一种解决方案。
The data types text and varchar are incompatible in the equal to operator
注意:我的数据库字段已经声明为 VARCHAR(MAX) 而不是文本。
【问题讨论】:
标签: python sql-server-2008 sqlalchemy freetds