2017-07-27 4 views
0

Ce que je peux observer:
32 bits pyodbc pour 32bit python (3.6) fonctionne avec pilote 64 bits odbc de Microsoft. Pourquoi?

  • J'utilise Windows 7 64bit Mon code (établir une connexion odbc avec un serveur SQL sur le réseau, les opérations de lecture simple seulement) est écrit en Python 3.6. 2 32bit
  • Je pip installé pyodbc, donc je suppose que c'était aussi 32 bits.
  • J'ai téléchargé et installé le "Microsoft® ODBC Driver 13.1 pour SQL Server®" sur le site Web de Microsoft.
  • Mon code python se connecte à d'autres ordinateurs sur le réseau, qui exécutent server2003 32 bits et SQL Server 2005 (32 bits) ou sql2008 (32 bits).

La configuration fonctionne. De plus: le test ci-dessus montre que la configuration ci-dessus peut se connecter à un ordinateur avec Microsoft server2008 (64bit) exécutant sql2012 (64bit) avec la configuration sous "Connexion réseau SQL Server (32bit)" vide (meaing, la DLL 32 bits est manquante), tandis que la configuration par défaut de la connexion réseau 64 bits contient les options de configuration habituelles telles que l'adresse IP et les informations sur le port d'écoute.

Ma propre explication:
[1] le client et OS du serveur et les interfaces ODBC peuvent être de toute combinaison 32/64 bits, mais le protocole qui se déplace à travers le réseau entre mon ordinateur et l'ordinateur SQL être identique.
[2] Python 32 bits + pyodbc peut parler au pilote ODBC 64 bits de Microsoft, car ... 32 bits Python sait comment utiliser une DLL 64 bits ...?

Répondre

1

Une application 32 bits ne peut pas invoquer une DLL 64 bits, de sorte que Python 32 bits ne peut pas parler à un pilote 64 bits à coup sûr.

pilote msodbc pour le serveur SQL est essentiellement un fichier dll: msodbcsql13.dll

Je viens de découvrir (qui est même pas mentionné par Microsoft) que « odbc pour le serveur SQL 13.1 x64 » installera un msodbcsql13 64bit .dll dans system32 et un msodbcsql13.dll 32 bits dans SysWOW64 (version 32 bits de "system32" sur un système Windows 64 bits)

Je ne peux cependant pas être certain que le protocole réseau entre un client 32 bits parlant au serveur 64bit sql sera Identique à un client 64 bits qui parle à un serveur SQL 64 bits. Mais, je crois que, une fois qu'une requête est mise sur le réseau par le client au serveur, 32 bits ou 64 bits n'a plus d'importance. Quelqu'un s'il vous plaît commenter sur ce

+0

* "Je crois que, une fois qu'une demande est mise sur le réseau par le client au serveur, 32 bits ou 64 bits n'a plus d'importance." * - C'est correct. –

+0

@GordThompson Merci, Est-ce parce que, la spécification ODBC verrouille le protocole pour échanger des informations entre les pilotes. Alors que nous n'avons pas de problèmes comme les confusions de pointeurs 32bit/64bit, ou des problèmes comme un int peut être 32 ou 64bit. Un pilote ODBC 64 bits sur un serveur peut comprendre le langage ODBC parlé par un client ODBC 32 bits. C'est presque comme un objet COM, une spécification de fer plaqué, indépendamment des bits. – eliu