Python 3 and mysql through SQLAlchemy
Solution 1
I was successful in getting Oracle's MySQL connector for python working with SQLAlchemy on Python 3.3. Your connection string needs to start with "mysql+mysqlconnector://...". After I changed my connection string everything (well, simple things) started working.
The MySQL connector docs can be found here: https://dev.mysql.com/doc/connector-python/en/
The package is up on PyPi: https://pypi.org/project/mysql-connector-python/
Here are the SQLAlchemy docs about using the Python connector: http://docs.sqlalchemy.org/en/latest/dialects/mysql.html#module-sqlalchemy.dialects.mysql.mysqlconnector
Solution 2
For others who arrive here, this should do it:
- pip install mysql-connector==2.1.4 # version avoids Protobuf error
- URI = 'mysql+mysqlconnector://$USER:$PASS@$HOST/$DB'
Solution 3
I tried Oracle's connection, as suggested by @Brad Campbell, but unfortunately it was extremely slow, much slower than the "real" MySQL-Python
connection I had been using with SQLAlchemy
on Python 2.
After checking SQLAlchemy themselves,
http://docs.sqlalchemy.org/en/latest/dialects/mysql.html#module-sqlalchemy.dialects.mysql.mysqldb
To use MySQL-Python
on Python 3, they recommend a fork of it, mysqlclient
,
https://github.com/PyMySQL/mysqlclient-python
It is available via pip with pip install mysqlclient
, but there are almost certainly other steps you'll need to do to set it up initially. After that though, I was seeing the performance go back to what I was used to, which was about 5x faster than with Oracle's connector.
Solution 4
I've gotten oursql + SQLAlchemy 0.8.1 + Python 3.3 to work. Building off of LukeCarrier's port, I modified oursql.c to use the correct import levels, and it worked! Try this, and be sure to follow the readme:
https://github.com/clintron/py3k-oursql
You may also need to have the latest version of Cython.
martinqt
Updated on July 07, 2020Comments
-
martinqt almost 4 years
Currently:
- SQLAlchemy installed and working (or at least import v0.8.0b2)
- Mysql (v5.5.16)
- Distribute (0.6.34)
- Oracle mysql-python connector
- Python 3.2
- Windows 7 32/64 (note that I installed Python 32bits)
The problem is that MySQLdb or Oursql is required and I didn't managed to get any of them working.
Found this but didn't manage to get it working neither.
Edit: If you are aware of an other orm that works with Python3, I'm interested.
-
martinqt over 11 yearsI'll test this but at the time of the question it didn't worked. Maybe they finally made an update. There wasn't any sqlalchemy for 3.3.
-
jogojapan about 11 yearsYes, this works for me, too (using Python 3.2, though). However, I get DBAPIError exceptions when strings contain non-ASCII characters. Is this supposed to be working?
-
mrgrieves about 11 yearsIt should work. I just successfully inserted a Chinese character (北) through this connector. Is your database using UTF-8 or latin1?
-
jogojapan about 11 yearsIt's using UTF-8, and I tried
Unicode(100)
,String(100)
andString(100, convert_unicode = True)
. But anyway.. I'll continue to experiment. Good to know that it's supposed to be working. Thank you.