2017-09-09 6 views
2

Verwenden von FreeTDS und Python3.5-Bibliothek PyPyodbc Ich erhalte eine 'Byte string too long' beim Versuch, eine Zeile in der SQL Server-Datenbank (unter Windows) einzufügen. Unter FreeTDS conf-Datei gibt es eine vairable 'text size', die ich geändert:Byte Zeichenfolge zu lang PyPyOdbc

[global] 
text size = 4294967295 

Hier ist die Konfigurationsdateien

/etc/freetds/freetds.conf 
[global] 
     tds version = 4.2 
     text size = 4294967295 

[sqlserver] 
     host = 192.168.0.3 
     port = 1433 
     tds version = 8.0 

/etc/odbc.ini 
[sqlserverdatasource] 
Driver = freetds 
Description = SQL Server 
Servername = sqlserver 
Database = MyDB 
TDS_Version = 8.0 

/etc/odbcinst.ini  
[freetds] 
Description = MS SQL 
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so 
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so 
Trace = Yes 
TraceFile = /tmp/freetds.log 
FileUsage = 1 
UsageCount = 1 

Executing 'tsql -C':

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

Executing '/usr/bin/tsql -S 192.168.0.3 -U user':

Password: 
locale is "en_US.UTF-8" 
locale charset is "UTF-8" 
using default charset "UTF-8" 

Executing 'odbcinst -j':

unixODBC 2.3.1 
DRIVERS............: /etc/odbcinst.ini 
SYSTEM DATA SOURCES: /etc/odbc.ini 
FILE DATA SOURCES..: /etc/ODBCDataSources 
USER DATA SOURCES..: /home/metheUser/.odbc.ini 
SQLULEN Size.......: 8 
SQLLEN Size........: 8 
SQLSETPOSIROW Size.: 8 

Python PyPyodbc Verbindungszeichenfolge:

connStr = 'DSN=sqlserverdatasource;Database=MyDB;uid=user;pwd=password' 

Aber der Fehler weiterhin angezeigt wird, was mir fehlt?

+0

Geben Sie Ihren Code ein. Wir müssen auch die SQL-Tabellendefinition kennen. – Mike

+0

Derselbe Befehl wurde direkt aus SQL Management Studio ausgeführt und es funktionierte. Die Spalte ist nvarchar (MAX). Ich suche jetzt, warum FreeTDS weiterhin Version 4.2 verwendet, wenn Sie den folgenden Befehl ausführen: tsql -C – user0187409

+0

@ user0187409 - Versuchen Sie 'TDS_Version = 7.3' zu Ihrer Verbindungszeichenfolge (oder DSN-Eintrag in odbc.ini) hinzuzufügen und sehen Sie, ob das hilft (ref: [hier] (http://www.freetds.org/userguide/odbcconnattr.htm)). –

Antwort

1

Ich fand schließlich das Problem, anders als in TDS_Version = 8.0 festgelegt, ist die Zuweisung für einen Zeichenpuffer in PyPyodbc nicht genug. Meine Abfrage hat mindestens 3100 Zeichen. Das Aktualisieren des PyPyodbc direkt, um die Menge zu verdoppeln, war für jetzt ausreichend. Nicht sicher, ob es vervierfacht werden muss.

Warum wurde das nicht zur Bibliothek hinzugefügt? Für weitere Informationen: https://github.com/jiangwen365/pypyodbc/issues/27

Dank @GordThompson, um mir mit den Möglichkeiten zu helfen und es auf seine eigene Umgebung zu testen.

Verwandte Themen