2016-08-26 1 views
1

Ich versuche, den Datum-Datentyp von SQLserver 2014 als natives Python-Datum durch Pymssql zu bekommen. Basierend auf Pymssql doc, muss ich 0,95+ freetds lib und 7,3 freetds ver haben.pymssql/freetds Datum von sqlserver

# 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 

Und ich habe folgende Konfiguration:

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

Und ich noch Python String statt Datum. Dies ist von der TDSDUMPCONFIG. Liegt es daran, dass freetds 0.95.8 tds 7.3 nicht unterstützt? (Die Haupt-/Nebenversion scheint zu 7/1 ersetzt worden zu sein).

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 = 

Wenn ich die tds Version 7.4 in der Config gesetzt, dann merke ich, diesen Fehler im Protokoll:

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 

Env: Linux/RH 6 + Python3.4.3 + pymssql (2.1. 1) alle x64

Irgendwelche Vorschläge?

+1

Haben Sie versucht, die TDS-Version explizit in Ihrem '.connect'-Aufruf anzugeben, um festzustellen, ob das einen Unterschied macht? z. B. 'pymssql.connect (server = 'sqlsvr1', port = '1433', ..., tds_version = '7.3')' –

+0

Es zeigt in Ihrer FreeTDS-Konfiguration, dass es unixODBC verwendet. Wenn Sie die tds_version nicht in der Verbindungszeichenfolge angeben, müssen Sie sie auch in Ihre odbc.ini-Datei einfügen. DNS: 'TDS_Version = 7.2' – FlipperPA

Antwort

2

Sie haben die meisten der erforderlichen Stücke.

Aber die fehlende ist die Tatsache, dass Sie Pymssql 2.1.1 verwenden.

Die Unterstützung für die Datentypen DATE und TIME ist implementiert, aber für pymssql 2.2.0, das noch nicht veröffentlicht wurde, ist es zielgerichtet. Wenn Sie es jetzt brauchen, müssen Sie es selbst aus dem "Master" Git-Zweig erstellen.

+0

Vielen Dank! Was ist das geschätzte Veröffentlichungsdatum für 2.2.0? – fivelements

+0

Danke, das hat mein Problem auch behoben. Sie müssen immer noch von Git installieren (2017-07-20), das neueste Pymssql 2.2 wurde noch nicht veröffentlicht. –