Форум сайта python.su
Здраствуйте форумчане, тут недавно окунулся в Пайтон и заинтересовался кодингом на нем. Поставили передо мной задачку написать небольшую программу , которая берет данные с MySQL, что то с ними делает и результат в файлик записывает, вот я и решил использовать его.
Так вот суть вопроса, как работать с MySQL из Python?
По сути задания, все больше склоняюсь к поиску mysql конектора к Python 3, так как база у меня в UTF-8, а во втором Пайтоне с юникодом трудно, да и думаю нужно переходить со временем итак…
Погуглив и почитав форум, нашел пару вариантов простых, которые пользуются популярностю:
1. Mysqldb - только Python 2.х, с 3.х не работает, автор, в своем твиттере и блоге говорить что в ближайшем будущем напишет под новую версию, правда пока глухо. Писать софт хотелось бы под Python 3, или под Python 2 но с возможным переходом на 3, а тут как бы непонятно. http://sourceforge.net/projects/mysql-python/
2. На гитхабе нашел некую модификацию проекта MySQLdb для использование с Python 3.* http://github.com/davispuh/MySQL-for-Python-3 пишут, что местами баговая, делаеться не автором MySQLdb, но все же вариант.
3. Проект oursql, на сайте есть сравнение чем она лучше MySQLdb, родная поддержка юникода и Пайтона 3 очень заинтересовала, сайт проекта: http://pythonhosted.org/oursql/
4. Еще один проект на гитхабе, Python 3.x support. https://github.com/petehunt/PyMySQL
5. pyodbc - также не особо апдейтится, но есть поддержка Пайтона 3 http://code.google.com/p/pyodbc/
6. MySQL connector - офицыальный конектор, вроде активно начал розвиваться, но многие говорять что жутко лагает, куча багов и недоделок еще, и мало производителен в сравнение с Mysqldb http://dev.mysql.com/doc/connector-python/en/index.html
Уточню вопрос, что выбрать? С чем лучше и комфортнее работать с Вашей практики? Может есть еще альтернативы? Я понимаю однозначного ответа нет и не будет, и нужно будет что-то выбрать, но буду благодарен за ответы.
P.S. чесно говоря просто запутался уже с конекторами, так как новичок в деле и еще теряюсь немного от избытка инфы.
Офлайн
Присоединяюсь к вопросу! Даже специально зарегистрировался ради этого Сам новичок в питоне, и с удивлением обнаружил, что для такой элементарной вещи, как подключение к MySQL да пары SELECT-ов нет простого и распространённого решения. 3 дня копал, но толком ничего в этом направлении не нашёл.
Офлайн
omaticРаботал с MySQL из второго питона без проблем. Проблема юникода несколько преувеличена. Строки не юникодовые по умолчанию (в третьем наоборот, и всё), но никто не запрещает сделать их таковыми одним движением.
так как база у меня в UTF-8, а во втором Пайтоне с юникодом трудно
dscДа ну. так же просто как к sqlite. Причем DB-API и является распространённым решением.
и с удивлением обнаружил, что для такой элементарной вещи, как подключение к MySQL да пары SELECT-ов нет простого и распространённого решения.
Отредактировано Shaman (Март 27, 2013 19:08:53)
Офлайн
Работаю с 2007 года с базами данных на втором питоне, пока живой.
Для mysql классический вариант это MySQLdb пакет, ставится так:
pip install mysql-python
Офлайн
http://dev.mysql.com/doc/connector-python/en/index.html
Но правда к django не подходит, но с python 3.3 работает нормально
Офлайн
Спасибо всем отписавшимся!
lorienЗабыл сказать, что я начал с 3-го питона, поэтому MySQLdb не подходит, т.к. пока не портирован на тройку.
Работаю с 2007 года с базами данных на втором питоне, пока живой.Для mysql классический вариант это MySQLdb пакет, ставится так:pip install mysql-python
sudo apt-get install python3-setuptools
easy_install3 pymysql3
import pymysql conn = pymysql.connect(host='127.0.0.1', user='root', passwd='superpass', db='mysql', charset='utf8') cur = conn.cursor() cur.execute("SELECT Host,User FROM user") # print cur.description # r = cur.fetchall() # print r # ...or... for r in cur: print (r) cur.close() conn.close()
Офлайн
Ещё можно банально юзать алхимию. Да там много документации, но не обязательно сразу постигать таинства ORM, можно юзать её именно как коннектор к базе данных. Из кообки будут сразу доступны плюшки типа:
for row in conn.execute('select * from persons'):
print row.name
print row.age
Офлайн
Shaman,
Да, с кодировкой я немного перегнул, но сначала я начал изучать более подробно Python3, и там работа с юниодом более изящная, плюс со временем преходить нужно на 3 версию, но на вкус и цвет все карандашы разные
Shaman, lorien,
Я так понимаю SQLAlchemy не только поверх других конекторов можно использовать? но и как собственно конектор? Посмотрю в ее сторону и интеграцию с Python 3, спасибо
dsc, Спасибо, я пока остановился на офф. конекторе http://dev.mysql.com/doc/connector-python/en/index.html так как проект небольшой, сложных запросов нет, только простенькие селект и т.п.
П.С. а вот сразу назрел вопрос по ходу обсуждения, а с Джангой и Пайтон3 кто-то с конекторов роботает? Так как думаю к коду простенький веб прикрутить. Знаю что для Пайтон 2 использовался MySQLDB и поверх Django, а как с тройкой?
П.П.С. на офф сайте нашел инфу:
Django 1.5 introduces support for Python 3 - specifically, Python 3.2 and above.https://docs.djangoproject.com/en/dev/releases/1.5/#python-3-support
Some features of Django aren’t available because they depend on third-party software that hasn’t been ported to Python 3 yet, including:
the MySQL database backend (depends on MySQLdb)
ImageField (depends on PIL)
LiveServerTestCase (depends on Selenium WebDriver)
Отредактировано omatic (Март 30, 2013 22:01:31)
Офлайн
Добрый !
Тот же вопрос - выбор коннектора.
инструменты самые новые:
- win 2003 x86
- python 3.3.2
- MySQL 5.6
- Mysql connector 1.0.12
Попробовал официальный коннектор из msi.
Импорт работает только так
import mysql
import mysql.connector
Отредактировано Ace (Окт. 3, 2013 14:09:48)
Офлайн
Ace
Не знаю как в виндах, но для linux нужно ставить для каждой присутсвующей в системе версии python. Как правило python это символическая ссылка на python2.7. Потому надо ставить так:
python3.3 setup.py install
Офлайн