2012-05-08 1 views
0

J'ai récemment commencé à utiliser une boîte Windows 7. J'essaie d'interroger une base de données Sybase à l'aide de pilotes ASE 32 bits (Adaptive Server Enterprise). Le client Sybase installé sur la machine est v15.5.pourquoi pyodbc interroger Sybase db retournant des données partielles avec des déchets?

Le problème est que lorsque je demande des petites données, j'obtiens un résultat correct mais si le résultat attendu est supérieur à 40 lignes, j'obtiens une erreur.

>>> x = smd.Query("select ric_code as ric, weight, adjusted_weight as adjweight, 
    currency as currency, close_price as last from v_temp_idx_comp where index_ric_ 
code='.HSI'") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "s:\quant\python\v1.0\smd.py", line 15, in Query 
    result = x.fetchall() 
pyodbc.Error: ('HY000', 'The driver did not supply an error!') 

Je ne suis pas sûr de savoir comment résoudre cette erreur. Quelles mesures puis-je prendre pour déboguer davantage? Puis-je utiliser certains outils de ligne de commande pour approfondir la question? que diriez-vous isql? Vont-ils utiliser les mêmes pilotes sous-jacents?

Pour info, la requête ne pose aucun problème. La requête fonctionne très bien sur ma machine précédente qui utilisait le pilote Merant.

Toutes les suggestions sont les bienvenues.

+0

Une erreur est survenue dans l'appel de fonction 'fetchall()' du curseur. – Alok

+0

Je viens de découvrir qu'il y a un problème avec l'une des colonnes du jeu de résultats qui corrompt la sortie. je dois étudier plus loin comment éviter ceci. si je dépose cette colonne, je reçois les données correctement. – Alok

Répondre

1

Je suis juste tombé sur ce post parce que je rencontrais exactement le même problème. (Windows 7 et Sybase ASE 15.5 [seulement python 2.7.2 dans mon cas].)

Je pense que je viens de trouver mon problème: l'une des colonnes de la table que j'ai interrogée a été définie comme ayant des données "bigint" type. Puisque c'est une nouvelle table pour moi, j'ai laissé tomber la table et l'ai recréée en utilisant seulement "int" comme type de données, et maintenant cela fonctionne très bien. J'ai eu de la chance parce que je n'ai pas vraiment besoin de la capacité supplémentaire du type "bigint" - "int" est suffisant pour ce que je fais.

+0

nous avons également trouvé le problème. l'une des vues générées dynamiquement avait une colonne avec une précision qui n'était pas gérée par le pilote. Après avoir changé la définition de la vue et forcé la colonne à avoir une valeur de précision correcte, nous avons réussi à résoudre le problème. Malheureusement, le pilote ne fournit pas d'erreur correctement. – Alok

Questions connexes