7
votes

Utilisation de pyodbc sur Ubuntu pour insérer un champ d'image sur SQL Server

J'utilise ubuntu 9.04 strong>

J'ai installé les versions de package suivantes: p> xxx pré>

J'ai configuré / etc / etc. UNIXODBC.INI CODE> Comme ceci: P>

Original: 4744611; Returned: 4096
Traceback (most recent call last):
  File "/home/nosklo/devel/teste_mssql_pyodbc_unicode.py", line 53, in <module>
    assert data == returned_data
AssertionError


1 commentaires

Qu'est-ce que vous obtenez lorsque vous sélectionnez DataLength (myImage) du test '? Au moins cela vous dira si votre problème est avec le stockage ou la récupération.


3 Réponses :


3
votes

Je pense que vous devriez utiliser un pyodbc.binaire code> instance pour envelopper les données: xxx pré>

récupération devrait être p> xxx Pré>

Mise à jour: strong> Le problème est d'insertion. Changez votre insertion SQL sur les éléments suivants: P>

"""DECLARE @txtptr varbinary(16)

INSERT INTO testing (myimage) VALUES ('')
SELECT @txtptr = TEXTPTR(myimage) FROM testing 
WRITETEXT testing.myimage @txtptr ?
"""


4 commentaires

Correct, bien que je devais utiliser str (cur.fetchall () [0] [0]) pour obtenir les données. .Value retourné: attributError: "tampon 'objet n'a pas d'attribut" valeur "


J'ai toujours des problèmes. J'ai mis à jour la question, s'il vous plaît jeter un oeil.


Thaans Vinay pour la mise à jour. Éteint le problème n'est pas en insertion. J'ai essayé le code TextPtr et j'ai obtenu exactement le même résultat. Merci pour votre temps. J'ai de nouveau modifié la question pour montrer le problème actuel. Pouvez-vous me donner le code complet que vous avez dit qui fonctionnait? Pouvez-vous me donner des détails sur votre configuration? Je ne peux toujours pas le faire fonctionner. Si cela ne demande pas grand chose, pouvez-vous également exécuter mon code inchangé sur votre configuration et dites-moi les résultats? Je l'ai rendu disponible sur Coller.pocoo.org/show/125955 et il utilise Un fichier sur Internet afin qu'il fonctionnera exactement le même.


Je n'ai pas accès SQL Server 2000 de Jaunty pour le moment; et votre code (posté sur Lodgeit) fonctionne parfaitement pour moi sous Windows. Donc, cela pourrait être quelque chose à voir avec le pilote Freetds ou autre chose dans la pile Linux. Désolé je ne peux pas être d'aide plus d'aide.



5
votes

hein, juste après avoir offert la générosité, j'ai découvert la solution.

Vous devez utiliser SET Textsize 2147483647 sur la requête, en plus de l'option de configuration de la taille du texte dans /etc/freetds/freetds.conf .

J'ai utilisé xxx

et tout a fonctionné bien.

étrange est ce que Documentation de Freetds dit sur l'option de configuration de la taille du texte:

valeur par défaut de textsize , en octets. Pour texte et image DaTatypes, définit la largeur maximale de toute colonne renvoyée. Cf. SET Textsize dans la documentation t-sql de votre serveur.

La configuration indique également que la valeur maximale (et la valeur par défaut) est de 4,294 967 295. Cependant, lorsque vous essayez d'utiliser cette valeur dans la requête, je reçois une erreur, le numéro maximum que je pourrais utiliser dans la requête est de 2 147 483 647 (moitié).

de cette explication que je pensais que définir cette option de configuration serait assez. Il s'avère que j'avais tort, définir des textes sur la requête fixe le problème.

ci-dessous est le code de travail complet: xxx


0 commentaires

1
votes

J'ai eu un problème similaire 4096 code> troncature sur texte code>, quel définit textsize 2147483647 code> corrigé pour moi, mais cela m'a aussi réparé pour moi :

import os
os.environ['TDSVER'] = '8.0'


0 commentaires