mssql-pythonドライバーはモジュール全体の動作を制御する Settings クラスを提供します。 これらの設定はすべての接続やカーソル操作に影響を与えます。 接続を作成する前に、アプリケーション起動時に一度だけ設定してください。
アクセス設定
現在の Settings オブジェクトを取得し、そのプロパティを検査または修正します:
import mssql_python
# Get settings object
settings = mssql_python.get_settings()
# Check current values
print(settings.lowercase)
print(settings.decimal_separator)
使用可能な設定
以下の設定は、ドライバーがデータをどのように返すかと結果のフォーマットを制御します。
小文字
lowercase設定はcursor.descriptionの列名が小文字で表示されるかどうかを制御します。 アプリケーションが名前でカラムにアクセスする場合で、大文字/小文字の不一致を避けたいときは、この設定を有効にしてください。 FlaskやFastAPIのようなウェブフレームワークはしばしば行を辞書に変換するため、一貫したケース設定が重要になります。
settings = mssql_python.get_settings()
# Enable lowercase column names (default: False)
settings.lowercase = True
# Column names in cursor.description are now lowercased:
# ('productid', ...) instead of ('ProductID', ...)
| 価値 | 説明 |
|---|---|
False |
Default. 列名は元の大文字・小文字を保持します。 |
True |
cursor.descriptionの列名は小文字に変換されます。 |
小数点の区切り文字
ドライバは数値変換のための十進区切りを制御するモジュールレベルの機能を提供します。 この設定を変更するのは、SQL Serverインスタンスがフランス語やドイツ語のlocalesのように、小数点区切りにコンマを付けている場合のみです。 ほとんどのアプリケーションではこの設定を変更する必要はありません:
import mssql_python
# Get current separator
sep = mssql_python.getDecimalSeparator()
print(f"Current separator: {sep}") # Usually "."
# Set custom separator (for locales using comma)
mssql_python.setDecimalSeparator(",")
10進分類の処理についての詳細は、 データ型マッピングを参照してください。
native_uuid
native_uuid設定はUNIQUEIDENTIFIER列をPython uuid.UUIDオブジェクトとして返すか、pyodbc互換の大文字文字列として返すかを制御します。 この設定は、文字列UUID値に依存するpyodbcからの移行チームに有用です:
settings = mssql_python.get_settings()
# Return UUIDs as uuid.UUID objects (default: True)
settings.native_uuid = True
# Return UUIDs as uppercase strings (pyodbc-compatible)
settings.native_uuid = False
| 価値 | 説明 |
|---|---|
True |
Default.
UNIQUEIDENTIFIER 列は uuid.UUID オブジェクトを返します。 |
False |
UNIQUEIDENTIFIER 列は大文字の文字列(pyodbc互換)を返します。 |
接続ごとに native_uuid を設定することもできます:
# Override for a specific connection
conn = mssql_python.connect(connection_string, native_uuid=False)
Note
native_uuid設定はmssql-pythonバージョン1.5.0で導入されました。
モジュールレベルの定数
ドライバーは読み取り専用 DB-API 2.0のコンプライアンス定数を公開し、その能力を記述します。 これらの定数を使って、異なる DB-API ドライバーに適応するコードを書きます:
import mssql_python
# DB-API 2.0 compliance level
print(mssql_python.apilevel) # '2.0'
# Thread safety level
print(mssql_python.threadsafety) # 1
# Parameter style
print(mssql_python.paramstyle) # 'pyformat'
APILEVEL
apilevel定数は DB-API 遵守レベルを報告します:
| 価値 | Meaning |
|---|---|
'2.0' |
DB-API 2.0 完全準拠。 |
スレッドセーフティ
threadsafety定数はスレッドの安全性レベルを報告します:
| 価値 | Meaning |
|---|---|
0 |
スレッドはモジュールを共有できません。 |
1 |
スレッドはモジュールを共有しられますが、接続は共有できません。 |
2 |
スレッドはモジュールや接続を共有することができます。 |
3 |
スレッドはモジュール、接続、カーソルを共有することができます。 |
mssql-pythonドライバーは threadsafety = 1を使用します。つまり、以下の通りです:
- モジュールはスレッド間でインポートして使用できます。
- 各接続は一度に1つのスレッドにのみ属していなければなりません。
- スレッドごとに別に接続を作成するか、接続プール(デフォルトで有効)を使います。 詳細については、 コネクションプーリングをご覧ください。
パラムスタイル
paramstyle定数はパラメータのプレースホルダー形式を報告します:
| Style | フォーマット | Example |
|---|---|---|
'qmark' |
疑問符 | WHERE id = ? |
'numeric' |
数値位置 | WHERE id = :1 |
'named' |
名前を付けられた | WHERE id = :id |
'format' |
ANSI C printf | WHERE id = %s |
'pyformat' |
Pythonフォーマット | WHERE id = %(id)s |
mssql-pythonドライバーは paramstyle = 'pyformat'を使用しています。 SQLインジェクションを防ぐために、必ず名前付きパラメータを使用してください。 文字列フォーマットやf文字列を使ってユーザーの入力を組み合わせてクエリを作ってはいけません:
# Use named parameters with %(name)s syntax
cursor.execute(
"SELECT * FROM Production.Product WHERE ProductSubcategoryID = %(cat)s AND ListPrice > %(price)s",
{"cat": 5, "price": 10.00}
)
バージョン情報
どのバージョンのドライバーがインストールされているか確認してください:
import mssql_python
# Driver version
print(mssql_python.__version__) # e.g., '1.5.0'
起動時に設定を設定してください
接続を作成する前に、アプリケーション起動時にモジュール設定を一度設定してください。 早めに値を設定することで、接続間での不整合な挙動を防げます:
import mssql_python
def configure_driver():
"""Configure mssql-python settings for this application."""
settings = mssql_python.get_settings()
# Use lowercase column names in cursor.description
settings.lowercase = True
# Call at application startup
configure_driver()
# All subsequent connections use these settings
conn = mssql_python.connect(connection_string)
スレッド安全の考慮事項
モジュール設定はグローバルで、すべてのスレッド間の接続に影響を与えます。 接続がすでに開いている後に設定を変更すると、既存の接続がその変化を一貫して反映しない場合もあります。 最初の接続を作成する前に、すべての設定値を設定します:
import mssql_python
import threading
# Settings changes affect all threads
settings = mssql_python.get_settings()
settings.lowercase = True # Affects all connections in all threads
def worker():
# This connection uses the global settings
conn = mssql_python.connect(connection_string)
cursor = conn.cursor()
cursor.execute("SELECT Name FROM Production.Product")
row = cursor.fetchone()
print(cursor.description[0][0]) # 'name' due to global setting
threads = [threading.Thread(target=worker) for _ in range(5)]
for t in threads:
t.start()
for t in threads:
t.join()
Important
接続を作成する前に設定をしてください。 接続ができた後に設定を変更すると、動作が一貫性に欠けることがあります。
接続固有の構成
グローバルデフォルトを変えずに接続ごとに設定を上書きできます。 アプリケーションの異なる部分で異なる挙動が必要な場合は、接続ごとのオーバーライドを使いましょう。 例えば、レポートモジュールは文字列UUIDを必要とし、他のアプリケーションは uuid.UUID オブジェクトを使用します。
# Per-connection native_uuid override
conn = mssql_python.connect(connection_string, native_uuid=False)
# Use the autocommit property
conn.autocommit = True