Ich verwende SQLAlchemy, um eine Verbindung zu einer SQL Server-Datenbank herzustellen. Die Tabelle, die ich abfrage, hat eine Spalte. Unter Windows ist das resultierende Attribut für das SQLAlchemy-Objekt ein Python-Objekt datetime
. Unter Linux ist es eine Zeichenfolge.SQLAlchemy Rückgabezeichenfolgen anstelle von Datetime-Objekten
Meine SQLAlchemy Klasse sieht wie folgt aus
class MyTable(Model):
id_ = db.Column('Id', db.Integer, primary_key=True, index=True)
as_of_date = db.Column('AsOfDate', db.DateTime, nullable=False, server_default=db.FetchedValue())
# Other columns
Unter Windows bekomme ich diese
>>db.session.query(MyTable.as_of_date).first()
datetime.datetime(2006, 11, 30, 0, 0)
Unter Linux bekomme ich diese
>>db.session.query(MyTable.as_of_date).first()
('2006-11-30 00:00:00.00000000',)
Meine Verbindungszeichenfolgen wie folgt aussehen
Linux
mssql+pyodbc:///?odbc_connect=DRIVER={FreeTDS};Server=my_server;Port=1433;Database=my_database;UID=my_user;PWD=my_password;TDS_Version=8.0;
Windows
mssql+pyodbc://my_user:[email protected]_server/my_database?driver=SQL Server Native Client 11.0
Ich vermute, das hat etwas mit dem FreeTDS-Treiber zu tun. Obwohl SQLAlchemy documentation states, dass
DATUM und ZEIT werden unterstützt. Bind-Parameter werden in datetime.datetime() - Objekte konvertiert, wie von den meisten MSSQL-Treibern benötigt, und Ergebnisse werden bei Bedarf von Strings verarbeitet. Die Typen vom Typ DATE und TIME sind nicht für MSSQL 2005 und früher verfügbar. Wenn eine Serverversion unter 2008 erkannt wird, wird DDL für diese Typen als DATETIME ausgegeben.
Wie kann ich das beheben, so dass die Linux-Aufrufe datetime
Objekte zurückgeben?
Ist es wichtig, 'mssql + pyodbc' und nicht' mssql + pymssql' zu verwenden? Vielleicht ist es ein ODBC-Problem. Ich benutze normale 'datetime' Objekte, die auf demselben FreeTDS basieren. – 9000
@ 9000 Ich änderte meine Verbindungszeichenfolge zu 'mssql + pymssql: // mein_benutzer: mein_passwort @ mein_server/meine_datenbank 'und ich bekomme immer noch das gleiche Ergebnis wie oben. –
Läuft Ihre Linux-Box mit aktuellen Versionen von FreeTDS und SQLAlchemy? –