Open7

sqlserver datatimeoffset pdodbc sqlalchemy

nassynassy

https://docs.sqlalchemy.org/en/14/dialects/mssql.html#module-sqlalchemy.dialects.mssql.pymssql

pymssqlは現在保守されておらず、SQLServerの新しい機能のサポートにおいてMicrosoftODBCドライバーの進歩に遅れをとっています。このドキュメントの時点でのpymssqlの最新の公式リリースはバージョン2.1.4(2018年8月)であり、以下のサポートがありません。

datetimeoffset columns using timezone-aware datetime objects (values are sent and retrieved as strings)

nassynassy

CURRENT_TIMEZONE ( ) で確認する
https://docs.microsoft.com/ja-jp/sql/t-sql/functions/current-timezone-transact-sql?view=sql-server-ver15

Azure SQL Database ではタイムゾーンが常にUTC
ちなみに、SQL データベースとマネージドインスタンスは別物みたい。
https://docs.microsoft.com/ja-jp/azure/azure-sql/managed-instance/timezones-overview

Azure SQL Database では、タイム ゾーンの設定がサポートされていません。常に UTC に従います。 UTC 以外のタイム ゾーンの日付と時刻情報を解釈する必要がある場合、SQL Database の AT TIME ZONE を使用します。

SQL Database 内のデータのタイムゾーンについては、マイクロソフト社データセンター内に格納されているデータが、すべて UTC のタイムゾーンとなるため、変更できません。

https://cloudsteady.jp/post/3554/

nassynassy

対応内容

  • utc で持つのか、offset 付きで持つのかを決める
    • utc で持つ場合 -> シリアライザで aware (utc)に変換
  • カラムを datatimeoffset に変更
  • odbc を install (もしかしたら、Pymssqlでいけるか確認)
  • pyodbc を insatll
  • 接続文字列を変更(sslを使わない方法を調べる)
  • Column(DateTime(timezone=True) に変更
  • timezone aware な実装に変更する