2015-11-23 24 views
5

Ho un programma Python che si collega a un database MSSQL utilizzando una connessione ODBC. La libreria Python che sto usando è pypyodbc.Come ottenere l'intera colonna VARCHAR (MAX) con Python pypyodbc

Qui è la mia messa a punto:

  • di Windows 8.1 x64
  • SQL Server 2014 x64
  • Python 2.7.9150
  • PyPyODBC 1.3.3
  • driver ODBC: SQL Server Native Client 11.0

Il problema che sto avendo è che quando interrogo una tabella w con una colonna varchar (max), il contenuto viene troncato.

Sono nuovo di pypyodbc e ho cercato in giro come un matto e non riesco a trovare nulla su come impedire che ciò accada in Pypyodbc o anche in pyodbc. Almeno non con i termini di ricerca che ho usato e non so quali altre frasi provare.

Ho anche provato ad aggiungere SET TEXTSIZE 2147483647; alla mia query SQL, ma i dati vengono ancora troncati.

Come impedire che ciò accada? O puoi indicarmi la direzione giusta, per favore?

UPDATE:

Così, ho provato l'esecuzione di un cast nel mio query SQL. Quando faccio CAST(my_column as VARCHAR(MAX)) tronca nella stessa posizione. Tuttavia, se faccio CAST(my_column as VARCHAR(8000)) mi dà un set più grande del testo, ma sta ancora troncando alcuni dei contenuti. Se provo a fare qualcosa di più grande di 8000, ricevo un errore che dice che il massimo che posso usare è lo 8000. Qualcuno sa cosa potrebbe succedere qui? Sembra strano che l'utilizzo di MAX non funzioni.

+0

sono stato in grado di ricreare il problema utilizzando il pypyodbc: i miei 9386 caratteri di testo dal mio VARCHAR (MAX) della colonna è stato troncato a 2047 caratteri. Lo stesso identico codice Python ha restituito la stringa completa quando ho usato pyodbc invece di pypyodbc. –

+0

@GordThompson Grazie per il tuo commento. Recentemente ho tentato di utilizzare pyodbc invece di pypyodbc e per qualche motivo non sono riuscito a restituire completamente il mio set di dati. È possibile che il problema sia stato causato da qualcosa di non correlato, ma ho trovato una soluzione funzionante (l'ho appena postata come risposta) poco dopo aver provato pyodbc e ho finito con lo scartare l'idea di pyodbc. Se avrò tempo, proverò a implementare pienamente pyodbc come test. In questo modo posso pubblicare le mie scoperte per gli altri che potrebbero incontrare questo problema; nel caso in cui la mia altra soluzione non funzioni per loro. Grazie ancora! –

risposta

6

Bene, ho finito per risolvere il problema. Ho trovato questo collegamento per un problema simile, non solo in Python, e hanno scoperto che il problema era con il driver client nativo di SQL Server. Si consiglia invece di utilizzare il driver standard di SQL Server.

Così ho cambiato il mio driver nella mia stringa di connessione ODBC da SQL Server Native Client 11.0 a SQL Server e funziona perfettamente! Sto ottenendo l'intero contenuto della colonna VARCHAR (MAX) nella mia tabella di dati MSSQL.

Spero davvero che questo si riveli utile per chiunque incontri questo problema! In bocca al lupo!

Ecco il link: http://www.sqlservercentral.com/Forums/Topic1534163-391-1.aspx

1

Suppongo che tu stia utilizzando FreeTDS, poiché ho già riscontrato questo problema. Nel file freetds.conf, probabilmente sotto [global]:

[global] 
text size = 64512 

A seconda della versione di SQL Server, cambiare questo a:

[global] 
text size = 4294967295 

Avrete anche bisogno di cambiare uno dei tuoi DSN.

Se questo non è il problema, avremo bisogno di più informazioni: ti stai collegando da Linux o Windows? Quale versione di SQL Server? Quale driver stai usando per connetterti?

+0

Non credo che questo sia il problema, non è applicabile solo se sono su Linux? Mi sto connettendo da una macchina Windows. È SQL Server 2014. Questo è il driver che sto utilizzando per la mia connessione ODBC: 'SQL Server Native Client 11.0'. –

+0

C'è un modo simile per me di cambiare l'attributo della dimensione del testo per il connettore pypyodbc? –

+0

Ah, non si applica in questo caso. Non avevi dichiarato di essere su Windows, motivo per cui ho inserito "Suppongo che tu stia utilizzando FreeTDS", perché avevo già visto questo problema apparire in precedenza. Puoi modificare la tua domanda includendo: che sei su Windows (e versione e 32 vs 64), la tua versione di SQL Server (e 32 vs 64), la versione di Python (e 32 vs 64), la versione di pypyodbc e il driver ? Questa informazione sarà sicuramente di aiuto. – FlipperPA

Problemi correlati