Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

bulkcopy_arrow() / bulkcopy()` broken in 1.16.0

オープン
#855 コメント 2 件 リアクション 0 件 担当者 1 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@jahnvi480 がすでに取り組んでいます。

2026年10月22日 から。

  • #860 @jahnvi480 による — オープン

評価

難易度
3/5
見積もり時間
半日
初心者へのやさしさ
72/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
python
領域
database

調査の方向性

Start by reading mssql_python/cursor.py at the bulkcopy_arrow() implementation and trace how it imports and uses mssql_py_core; inspect the corresponding bulkcopy() path too. Reproduce the reported import behavior with the 1.16.0 Windows package and check where the connection classes are exposed. Done when both bulk copy methods can access the connection class after a clean 1.16.0 install.

索引モデルが issue の本文から書いたものです。

説明

area: bulk-copy bug inADO triage done under development

Title

bulkcopy_arrow() / bulkcopy() broken in 1.16.0: AttributeError: module 'mssql_py_core' has no attribute 'PyCoreConnection'

Description

After upgrading from 1.15.0 to 1.16.0, any call to cursor.bulkcopy_arrow(...) (and presumably cursor.bulkcopy(...), which shares the same pycore connection path) fails immediately with:

AttributeError: module 'mssql_py_core' has no attribute 'PyCoreConnection'

Full traceback:

File ".../site-packages/mssql_python/cursor.py", line 3764, in bulkcopy_arrow
    pycore_connection = mssql_py_core.PyCoreConnection(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: module 'mssql_py_core' has no attribute 'PyCoreConnection'

This reproduces on a clean pip install mssql-python==1.16.0 with no other code changes — the exact same script works correctly against 1.15.0.

Root cause

This looks like a packaging regression from the 1.16.0 change that split the Rust runtime out into a separate version-matched mssql-python-rs package (per the 1.16.0 release notes).

On Windows, after pip install mssql-python==1.16.0, the compiled extension lands at:

site-packages/mssql_py_core/mssql_py_core.pyd

There is no __init__.py inside site-packages/mssql_py_core/. As a result, import mssql_py_core resolves to an empty implicit namespace package (PEP 420) rather than loading the compiled extension — so mssql_py_core.PyCoreConnection doesn't exist at that path.

The compiled extension itself is fine and fully functional — it just needs to be imported one level deeper:

import mssql_py_core.mssql_py_core as core
print([a for a in dir(core) if "Connection" in a])
# -> ['PyAsyncConnection', 'PyCoreConnection']

But mssql_python/cursor.py's bulkcopy_arrow (and likely bulkcopy) does a plain top-level import mssql_py_core and then calls mssql_py_core.PyCoreConnection(...) directly, which hits the empty namespace package instead of the real module.

Likely fix: either (a) add an __init__.py to the mssql_py_core package in the mssql-python-rs wheel that re-exports from the nested mssql_py_core.mssql_py_core extension module, or (b) update mssql-python's internal imports to reference mssql_py_core.mssql_py_core explicitly.

Environment

  • mssql-python: 1.16.0 (regression; works correctly on 1.15.0)
  • mssql-python-rs: 0.3.0
  • mssql-python-odbc: 18.6.2.2
  • Python: 3.11.0
  • OS: Windows 10/11 (Windows-10-10.0.26200-SP0), x86_64
  • Install method: pip install mssql-python==1.16.0 (clean upgrade from 1.15.0 in an existing venv)

Reproduction steps

pip install mssql-python==1.16.0
python -c "
import mssql_python
cn = mssql_python.connect('SERVER=...;DATABASE=...;Trusted_Connection=yes;')
cur = cn.cursor()
cur.bulkcopy_arrow('some_table', some_pyarrow_record_batch_reader)
"

Minimal repro of the underlying import issue (no SQL Server connection needed):

import mssql_py_core
print(mssql_py_core.__file__)          # None -- confirms empty namespace package
print(hasattr(mssql_py_core, "PyCoreConnection"))  # False

import mssql_py_core.mssql_py_core as core
print(core.__file__)                   # points to the real .pyd
print(hasattr(core, "PyCoreConnection"))  # True

Expected behavior

import mssql_py_core should expose PyCoreConnection (and PyAsyncConnection) at the top level, as it presumably did before the 1.16.0 packaging split, so bulkcopy_arrow()/bulkcopy() work without modification.

Actual behavior

bulkcopy_arrow() / bulkcopy() are completely broken on 1.16.0 for Windows installs via pip, with no workaround short of pinning back to 1.15.0.

Impact

This blocks all bulk-copy / Arrow bulk-load workflows on 1.16.0. We've rolled back to 1.15.0 in the meantime.

主要言語
Python
スター
479
フォーク
62
平均マージ
2日 9時間
マージ済み PR(30日)
18

環境構築

Codespaces で開く

このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

microsoft/mssql-python のほかの issue

microsoft/mssql-python の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。