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.
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. –
@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! –