2012-01-11 29 views
18

Soy relativamente nuevo en bases de datos, realizo consultas SQL, etc. En este momento estoy usando exclusivamente MS SQL Server para mis DB (eso es lo que usamos en mi trabajo), pero ojalá las respuestas a mi pregunta pueden ser más generales que solo para ese DB en particular.pymssql versus pyodbc versus adodbapi versus ...

Hago una buena parte de mi trabajo utilizando la aplicación de interfaz de DB en sí (en este caso, SQL Server Management Studio), pero también trabajo con scripts de Python, algunos de los cuales se ejecutan como trabajos cron, algunos de los cuales son sitios web tales que los usuarios pueden enviar consultas a la base de datos.

He estado usando el módulo pymssql para consultar en & escribiendo en DBs de python. Pero hay algunos problemas molestos que me estoy encontrando. (Parece que pymssql no puede usar tablas temporales, y también he tenido problemas con "autocommit", pero es probable que sea por mi culpa)

Así que siendo ignorante de todo esto, me gustaría un sabor de qué dirección en que debería ir. Por lo que yo puedo decir, que pude ya sea:

  • uso pymssql, que habla directamente a los servidores MS SQL
  • uso pyodbc, que requiere FreeTDS instalación & unixODBC primero, y que fueron creados
  • uso Módulo adodbapi, y no estoy seguro de cuáles son los requisitos aquí.
  • otro método ??

La cosa es que yo no TOTALMENTE conseguir lo hace ODBC. Parece una especie de "intermediario de autentificación", algo así como un intermediario para asegurarse de que el usuario es quien dice. Y tengo aún menos conocimiento de ADO.

Si bien pymssql parece ser la forma más fácil de hacerlo, también parece ser la que la gente piensa menos y que eventualmente quedará obsoleta. Prefiero aprender el camino "correcto" ya que estoy comenzando con estas cosas.

Así que estoy buscando algunas opiniones conocedoras sobre la mejor manera de hacer que python hable con MS SQL Server, y hablar con DBs en general. Definiría "lo mejor" como lo mejor para alguien que haga cosas moderadamente complejas con él. (Aunque recién estoy comenzando, es algo que eventualmente tendré que aumentar un poco).

¡Gracias! Mike

Respuesta

16

pyodbc (recomendado)

he empezado a utilizar este módulo hace unos meses y no tengo quejas hasta ahora. La comunidad de desarrollo parece más activa que pymssql. No tuve problemas de instalación hasta el momento (32 bits Win XP y 64 bits Server 2008 R2). Tendrá la ventaja adicional de que no está limitado a los servidores MS SQL.

Puede encontrar: http://www.lfd.uci.edu/~gohlke/pythonlibs/ útil si está instalando en Windows.

pymssql

He trabajado con la versión 1.x de alrededor de 2,5 años. Tuve algunos problemas menores con las limitaciones de tamaño para objetos grandes. También me encontré con problemas masivos cuando multi-threading (hasta el punto que tuve que activar si está apagado). 1.x se basó en bibliotecas de MS obsoletas.Sin embargo, la versión más reciente es 2.x y ya no usa estas bibliotecas en desuso. En cambio, usa FreeTDS (como pyodbc). Suena bien, pero aún no lo he probado.

adodbapi

He intentado cambiar a cabo pymssql y su sustitución por adodbapi hace aproximadamente un año y algunas de las consultas que funcionaba bien con pymssql fallado por ninguna razón obvia. Rápidamente abandoné adodbapi nuevamente.

+3

Como se anunció en diciembre de 2016, pyodbc ahora es [oficialmente compatible con Microsoft] (https://blogs.technet.microsoft.com/dataplatforminsider/2016/12/09/sql-server -python-whats-new /). –

9

Desde mi experiencia, PYODBC es un poco problemático en estos días. En primer lugar, no parece administrar las cadenas Unicode de manera adecuada o confiable. En segundo lugar, la API está un poco desactualizada, es específica y menos compatible con Python DB-API (PEP-249).

Estoy en medio del código de proyecto de migración a PYMSSQL que, durante mis pruebas hasta el momento, cubre las bases de los dos temas anteriores. No estoy al tanto de ninguna desaprobación con esta API, ya que parece actualizarse con cierta frecuencia (versión principal en octubre de 2013), los documentos están más o menos actualizados y la función está activa.

Estos son solo mis hallazgos y progresos actuales con PYODBC y PYMSSQL. Todo sujeto a cambios de rumbo :)

+2

Sí, pyodbc pasó por un momento difícil, pero ha recibido algunos TLC últimamente y ahora es [oficialmente compatible con Microsoft] (https://blogs.technet.microsoft.com/dataplatforminsider/2016/12/09/ sql-server-python-whats-new /). –

+1

A principios de este año (2017) hubo una propuesta de descontinuar pymssql, ver [Propuesta de descontinuar pymssql a favor de pyodbc] (https://github.com/pymssql/pymssql/issues/477) y [pymssql vs pyodbc] (https://groups.google.com/forum/#!topic/pymssql/CLXHtLKBWig). Decidieron continuar, pero el último enlace muestra que la comunidad detrás de pymssql está luchando por encontrar mantenedores. Creo que en este momento pyodbc parece ser una mejor opción en general (tal vez pymssql es aún mejor dependiendo de sus necesidades). –