Open7
sqlserver datatimeoffset pdodbc sqlalchemy

Sql Server で datatimeoffset を使う場合
対応済みのPR

- ODBC の insatall
- pyodbc の install
- 接続
- 接続文字列をodbcに渡すらしいので詳しくはODBCのoptionを調べる
- https://docs.sqlalchemy.org/en/14/dialects/mssql.html#hostname-connections
- https://docs.microsoft.com/ja-jp/sql/connect/python/pyodbc/step-3-proof-of-concept-connecting-to-sql-using-pyodbc?view=sql-server-ver15
- https://tech.chakapoko.com/python/db/sqlserver.html
- ssl 回りが未解決
- マイクロの数字は切り捨てられるかも
- utc (offset 無し) に変換して保存するのが良いらしいが

timezone情報があるもの=aware。ないもの=native。

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

CURRENT_TIMEZONE ( ) で確認する
Azure SQL Database ではタイムゾーンが常にUTC
ちなみに、SQL データベースとマネージドインスタンスは別物みたい。
Azure SQL Database では、タイム ゾーンの設定がサポートされていません。常に UTC に従います。 UTC 以外のタイム ゾーンの日付と時刻情報を解釈する必要がある場合、SQL Database の AT TIME ZONE を使用します。
SQL Database 内のデータのタイムゾーンについては、マイクロソフト社データセンター内に格納されているデータが、すべて UTC のタイムゾーンとなるため、変更できません。

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