Impossible de se connecter à la base de données SQL Server à l'aide de pymssql, mais peut se connecter à l'aide de freetds tsql sous-jacent
Je n'ai aucune idée de pourquoi j'obtiens ce message d'erreur et ne peut pas trouver des solutions pour cela. Je peux me connecter à une base de données SQL Server à l'aide de freetds tsql, mais je reçois un message d'erreur lors de la connexion à l'aide de pymssql.connect
.
L'erreur spécifique est:
pymssql.OperationalError: (18456, "échec de la Connexion de l'utilisateur 'xxx'.DB-Lib message d'erreur 18456, la gravité 14:\nGeneral SQL Server
erreur: Vérifier les messages à partir du Serveur SQL server\nDB-Lib message d'erreur 20002,
la gravité 9:\nAdaptive connexion au Serveur a échoué\n")
J'ai le jeu de configuration pour freetds:
[custom_config]
host = myhost
port = 1433
tds version = 7.0
encryption = request
dump file = /tmp/freetds.log
en cours d'exécution:
tsql -S custom_config -U tsmv -P xxx
retourne:
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1>
qui me permet d'interroger la base de données.
Cependant, en cours d'exécution:
python
>> import pymssql
>> pymssql.connect(server='custom_config', user='user', password='xxx', database='database')
soulève l'erreur ci-dessus.
Je suis sous Linux CentOS, python 2.6.6, freetds 0.92 dev (j'ai essayé d'autres versions de la compilation avec tdsver=7.0).
La freetds journal est:
log.c:196:Starting log file for FreeTDS 0.92
on 2012-04-12 10:39:15 with debug flags 0x4fff.
iconv.c:330:tds_iconv_open(0x1391b70, ISO-8859-1)
iconv.c:187:local name for ISO-8859-1 is ISO-8859-1
iconv.c:187:local name for UTF-8 is UTF-8
iconv.c:187:local name for UCS-2LE is UCS-2LE
iconv.c:187:local name for UCS-2BE is UCS-2BE
iconv.c:349:setting up conversions for client charset "ISO-8859-1"
iconv.c:351:preparing iconv for "ISO-8859-1" <-> "UCS-2LE" conversion
iconv.c:391:preparing iconv for "ISO-8859-1" <-> "UCS-2LE" conversion
iconv.c:394:tds_iconv_open: done
net.c:205:Connecting to xx.x.x.xxx port 1433 (TDS version 7.1)
net.c:270:tds_open_socket: connect(2) returned "Operation now in progress"
net.c:310:tds_open_socket() succeeded
util.c:156:Changed query state from DEAD to IDLE
net.c:741:Sending packet
0000 12 01 00 34 00 00 00 00-00 00 15 00 06 01 00 1b |...4.... ........|
0010 00 01 02 00 1c 00 0c 03-00 28 00 04 ff 08 00 01 |........ .(......|
0020 55 00 00 02 4d 53 53 51-4c 53 65 72 76 65 72 00 |U...MSSQ LServer.|
0030 c7 39 00 00 - |.9..|
net.c:555:Received header
0000 04 01 00 25 00 00 01 00- |...%....|
net.c:609:Received packet
0000 04 01 00 25 00 00 01 00-00 00 15 00 06 01 00 1b |...%.... ........|
0010 00 01 02 00 1c 00 01 03-00 1d 00 00 ff 0a 00 0f |........ ........|
0020 a0 00 00 02 00 - |.....|
login.c:1057:detected flag 2
login.c:782:quietly sending TDS 7+ login packet
token.c:328:tds_process_login_tokens()
net.c:555:Received header
0000 04 01 00 72 00 51 01 00- |...r.Q..|
net.c:609:Received packet
0000 04 01 00 72 00 51 01 00-aa 5e 00 18 48 00 00 01 |...r.Q.. .^..H...|
0010 0e 1d 00 4c 00 6f 00 67-00 69 00 6e 00 20 00 66 |...L.o.g .i.n. .f|
0020 00 61 00 69 00 6c 00 65-00 64 00 20 00 66 00 6f |.a.i.l.e .d. .f.o|
0030 00 72 00 20 00 75 00 73-00 65 00 72 00 20 00 27 |.r. .u.s .e.r. .'|
0040 00 74 00 73 00 6d 00 76-00 27 00 2e 00 0c 4d 00 |.t.s.m.v .'....M.|
0050 43 00 53 00 2d 00 44 00-41 00 54 00 41 00 42 00 |C.S.-.D. A.T.A.B.|
0060 41 00 53 00 45 00 00 01-00 fd 02 00 00 00 00 00 |A.S.E... ........|
0070 00 00 - |..|
token.c:337:looking for login token, got aa(ERROR)
token.c:122:tds_process_default_tokens() marker is aa(ERROR)
token.c:2588:tds_process_msg() reading message 18456 from server
token.c:2661:tds_process_msg() calling client msg handler
dbutil.c:85:_dblib_handle_info_message(0x14e2e30, 0x1391b70, 0x7fff8b047e40)
dbutil.c:86:msgno 18456: "Login failed for user 'xxx'."
token.c:2674:tds_process_msg() returning TDS_SUCCEED
token.c:337:looking for login token, got fd(DONE)
token.c:122:tds_process_default_tokens() marker is fd(DONE)
token.c:2339:tds_process_end: more_results = 0
was_cancelled = 0
error = 1
done_count_valid = 0
token.c:2355:tds_process_end() state set to TDS_IDLE
token.c:2370: rows_affected = 0
token.c:438:tds_process_login_tokens() returning TDS_FAIL
login.c:466:login packet accepted
util.c:156:Changed query state from IDLE to DEAD
util.c:331:tdserror(0x14e2e30, 0x1391b70, 20002, 0)
dblib.c:7929:dbperror(0x1383c70, 20002, 0)
dblib.c:7981:20002: "Adaptive Server connection failed"
dblib.c:8002:"Adaptive Server connection failed", client returns 2 (INT_CANCEL)
util.c:361:tdserror: client library returned TDS_INT_CANCEL(2)
util.c:384:tdserror: returning TDS_INT_CANCEL(2)
dblib.c:1443:dbclose(0x1383c70)
dblib.c:258:dblib_del_connection(0x7fa462faf540, 0x1391b70)
mem.c:615:tds_free_all_results()
dblib.c:305:dblib_release_tds_ctx(1)
dblib.c:5882:dbfreebuf(0x1383c70)
dblib.c:739:dbloginfree(0x1533a40)
Je suis complètement perdu pour expliquer pourquoi cela ne fonctionne pas. Toute aide serait grandement appréciée.
source d'informationauteur chewynougat
Vous devez vous connecter pour publier un commentaire.
La "Adaptive Server" echec de la connexion semble être assez générique message, mais voici quelques choses à essayer.
Cette liste de diffusion thread (http://lists.ibiblio.org/pipermail/freetds/2010q3/026060.html) estime que l'utilisation de la mauvaise protocole TDS résultats dans un "Adaptive Server" echec de la connexion message. Qui ne semble pas être le cas dans chewynougat du journal, mais peut-être qu'il aide les autres.
Cette FAQ donne beaucoup d'étapes à effectuer:
https://github.com/pymssql/pymssql/blob/87f4383ec153962b7ca7e63a05042d3f09005178/docs/faq.rst,
On est tenté de tester la tds connexion via tsql -H, qui contourne la lecture de la conf et ne lit que dans le passé dans des valeurs. Étant donné que la conf ci-dessus contient à la fois le port et le protocole de la version, il pourrait être utile de vérifier que le long avec tsql -C pour voir si il y a des ajustements nécessaires.
C'est le message d'erreur envoyé, donc peut-être essayer de Connexion Audit (http://msdn.microsoft.com/en-us/library/ms175850.aspx) pour voir si pymssql est le passage de vos informations de connexion correctement.
J'ai connu le même problème. Heureusement, j'ai trouvé ce qui est mal. J'ai eu deux versions différentes de FreeTDS sur ma machine. J'ai installé l'un d'entre eux(v 0.91)par:
plus tard, j'ai découvert ce n'est pas la dernière version et j'ai téléchargé le fichier tar de Freetds de freetds.org. Quand j'ai couru tsql -C. il a montré le bon chemin et je l'ai manipulé qui freetds.conf correctement. Avec l'évolution de la variable d'environnement (http://www.freetds.org/userguide/envvar.htm), j'ai pu connecter à la base de données. Cependant, chaque fois que j'ai essayé de vous connecter à l'Pymssql je suis d'erreur.
Enfin, j'ai regardé le fichier journal et j'ai compris que Python est l'aide de l'ancienne version (v 0.91) mais mon dernier est la version 0.95.
Donc, j'ai supprimé la version 0.91 avec:
et pymssql connecté à la bonne version avec la configuration correcte.
Il peut vous aider ainsi.
essayer de suivre les nouvelles notes dans le pymssql documentation: d'azur à besoin de prendre soin de la partie utilisateur. c'est tellement bizarre, mais travaillé. ms sql entrepôt fait que le travail sur linux/mac si difficile..
http://pymssql.org/en/latest/azure.html
IMPORTANT: Ne pas utiliser [email protected] pour l'utilisateur paramètre de la fonction connect() appel! Vous devez utiliser la plus courte du nom d'utilisateur@serveur de la forme plutôt que!