来自 sqlserver 的 pymssql/freetds 日期

Posted

技术标签:

【中文标题】来自 sqlserver 的 pymssql/freetds 日期【英文标题】:pymssql/freetds date from sqlserver 【发布时间】:2016-08-26 18:26:59 【问题描述】:

我正在尝试通过 pymssql 从 SQLserver 2014 获取日期数据类型作为本机 python 日期。基于pymssqldoc,我需要有0.95+ freetds lib和7.3 freetds ver.

# tsql -C
Compile-time settings (established with the "configure" script)
                        Version: freetds v0.95.8
         freetds.conf directory: /etc
 MS db-lib source compatibility: no
    Sybase binary compatibility: no
                  Thread safety: yes
                  iconv library: yes
                    TDS version: 4.2
                          iODBC: no
                       unixodbc: yes
          SSPI "trusted" logins: no
                       Kerberos: no
                        OpenSSL: no
                         GnuTLS: no

我做了以下配置:

#/etc/freetds.conf
[sqlsvr1]
    host = sqlsvr1
    port = 1433
    tds version = 7.3

我仍然得到 python 字符串而不是日期。这来自 TDSDUMPCONFIG。是因为freetds 0.95.8不支持tds 7.3吗? (主要/次要版本似乎已被替换为 7/1)。

config.c:620:IP addr is 172.16.12.26.
config.c:580:   port = '1433'
config.c:580:   tds version = '7.3'
config.c:886:Setting tds version to 7.3 (0x703).
config.c:568:   Reached EOF
config.c:300:Success: [sqlsvr1] defined in /etc/freetds.conf.
config.c:765:Setting 'dump_file' to '/tmp/freetds.log' from $TDSDUMP.
config.c:689:tds_config_login: client_charset is UTF-8.
config.c:213:Final connection parameters:
config.c:214:            server_name = sqlsvr1:1433
config.c:215:       server_host_name = sqlsvr1
config.c:218:                ip_addr = 172.16.12.26
config.c:218:                ip_addr = 172.16.12.26
config.c:218:                ip_addr = 172.16.12.26
config.c:223:          instance_name =
config.c:224:                   port = 1433
config.c:225:          major_version = 7
config.c:226:          minor_version = 1
config.c:227:             block_size = 0
config.c:228:               language = us_english
config.c:229:         server_charset =
config.c:230:        connect_timeout = 0
config.c:231:       client_host_name = rh1.int
config.c:232:         client_charset = UTF-8
config.c:233:              use_utf16 = 0
config.c:234:               app_name = pymssql
config.c:235:              user_name = USER
config.c:238:                library = DB-Library
config.c:239:              bulk_copy = 0
config.c:240:      suppress_language = 0
config.c:241:          encrypt level = 0
config.c:242:          query_timeout = 0
config.c:245:               database =
config.c:246:              dump_file = /tmp/freetds.log
config.c:247:            debug_flags = 0
config.c:248:              text_size = 64512
config.c:249:     emul_little_endian = 0
config.c:250:      server_realm_name =
config.c:251:             server_spn =
config.c:252:                 cafile =
config.c:253:                crlfile =

如果我在配置中将 tds 版本设置为 7.4,那么我会在日志中注意到此错误:

config.c:580:   tds version = '7.4'
config.c:881:error: no such version: 7.4
config.c:568:   Reached EOF
config.c:213:Final connection parameters:
... ... 
config.c:225:          major_version = 7
config.c:226:          minor_version = 1

环境:Linux/RH 6 + Python3.4.3 + pymssql(2.1.1) 所有 x64

有什么建议吗?

【问题讨论】:

您是否尝试过在您的.connect 调用中明确指定 TDS 版本,看看这是否会有所不同?例如,pymssql.connect(server='sqlsvr1', port='1433', ... , tds_version='7.3') 它在您的 FreeTDS 配置中显示它正在使用 unixODBC。如果您没有在连接字符串中指定 tds_version,请务必将其也放入您的 odbc.ini 文件 DNS:TDS_Version = 7.2 您知道如何更改 TDS 的 majorminor 版本吗? 【参考方案1】:

你有大部分需要的部分。

但缺少的是您使用的是 pymssql 2.1.1。

已实现对 DATE 和 TIME 数据类型的支持,但针对尚未发布的 pymssql 2.2.0。如果您现在需要它,您需要先从“主”Git 分支自己构建它。

【讨论】:

谢谢! 2.2.0 的预计发布日期是什么时候? 谢谢,这也解决了我的问题。截至今天(2017-07-20),您仍然需要从 Git 安装,最新的 pymssql 2.2 尚未发布。

以上是关于来自 sqlserver 的 pymssql/freetds 日期的主要内容,如果未能解决你的问题,请参考以下文章

急急急sqlserver2008中,如何统计多表的统计数。如下图每一行的数据来自一个表,总共来自8张表,在线等。

sqlserver表插入数据:要向A表中插入数据,其中一部分列的数据是来自B表另一部分列是固定值,应该怎么写?

SQL Server 2008 Windows 身份验证登录错误:登录来自不受信任的域

为啥oracle数据库链接不显示来自sql server的图像类型的列

来自 Python 的复杂 SQL Server 查询

关于sys.dm_exec_requests