Just used SqlBulkCopy via C# and .NET a few weeks ago to insert 5-7 million rows into multiple tables in a matter of seconds.
I don't think any of my tables had 50 columns, but one had maybe half of that. Reading your other posts, my experience was different in these ways:
Not using Python but C#
The machine performing the insert was physically close to the SQL server and did not utilize WAN. (Not sure if this applies to you as well, I don't recall you saying)
I don't remember putting a transaction on the insert. I just followed Microsoft's examples from the documentation. A transaction I think has a chance of nullifying the speed you gain from using bulk insert.
Lastly I think you should consider being be more respectful in some of your replies. We all get being frustrated with technology, but you don't need to extend that to people who are helping you for free.