Найти - Пользователи
Полная версия: Как читать документацию?
Начало » Python для новичков » Как читать документацию?
1
lifecoder
Люди, подскажите, пожалуйста, что я делаю неправильно..

Захотелось посмотреть, отчего некоторые программисты в таком восторге и уходят с PHP. Начал разбираться с Джанго, по пути стала прикладная задачка, решил получше познакомиться с языком и написать на Питоне. Проблема оказалась для меня абсолютно неожиданной.

Задачка мелкая, прикладной скрипт, посему решил использовать нижний уровень - в частности MySQLdb. Посмотрел пример, написал по аналогии - не пашет. Сначала ошибки выдавал (почему в примере строки используют без обрамляющих кавычек, когда на практике они для строк обязательны - не знаю..), потом перестал - а работы нет как нет. Минут через 20 поисков натолкнулся на connection.commit() после запроса - ну надо же, это, оказывается, транзакция была - и все выполняется по коммиту.

Но, если это так, то почему этого нет в примерах (которых аж 3 штуки на официальном http://mysql-python.sourceforge.net/MySQLdb.html ..), и где умные люди это ищут, чтобы не убить кучу времени на поиск несуществующей ошибки?
regall
lifecoder
ну надо же, это, оказывается, транзакция была - и все выполняется по коммиту
1. Вы раньше работали с реляционными базами данных? Если да, то почему это для вас такая неожиданность?
2. В Python есть принятый интерфейс для работы с реляционными базами данных, называется Python DB API. Практически любой коннектор к БД на Python будет работать согласно этому документу.
Ed
lifecoder
Люди, подскажите, пожалуйста, что я делаю неправильно..
Вы описываете проблему в вашем коде на форуме программистов, не показывая код.
lifecoder
regall
1. Вы раньше работали с реляционными базами данных? Если да, то почему это для вас такая неожиданность?
2. В Python есть принятый интерфейс для работы с реляционными базами данных, называется Python DB API. Практически любой коннектор к БД на Python будет работать согласно этому документу.
1. Я раньше работал с MySQL в PHP и напрямую, и ожидал, что работа с MySQL в питоне не отличается. Или, если отличается это как-то отображается в описании/примерах:)
2. Спасибо, буду знать.

Ed
Вы описываете проблему в вашем коде на форуме программистов, не показывая код.
Нет проблемы в коде. Есть проблема в понимании. Точнее, непонимании, почему в документации модуля указан пример без коммита, и нет никаких отсылок. Собственно, тут и моя ошибка, в FAQ есть пункт, в котором говориться, что с версии 1.2.0 (выпущенной 06.2005) отключен автокоммит. Но я все равно не понимаю, почему это не указано рядом с примерами, и это не спасло меня от долгих поисков ошибки в запросе. Спасло меня то, что попался пример с созданием таблицы - когда таблица создается, а инсерты не работают - приходит просветление..
regall
lifecoder
Я раньше работал  с MySQL в PHP и напрямую, и ожидал, что работа с MySQL в питоне не отличается
1. Да, в PHP по умолчанию транзакция заканчивается после выполнения запроса. Ну, это не сильно безопасно. Более безопасный подход с точки зрения разработки - явно что-то предоставлять, чем явно что-то запрещать (уберегает от механических ошибок).
2. По идее у вас хранилище InnoDB или BerkleyDB (BDB), при MyISAM транзакционности в принципе нет (только локи таблиц), так что должно работать и без явного коммита.
lifecoder
Вообще, это я просто ною:) Ожидал пресловутую “скорость разработки”, а тут грабли) Ну и разбалованность поддержкой PHP сказывается.
alexx11
Из своего опыта и пока свежо воспоминание, Python явно превосходит PHP по скорости освоения (изучения) языка. Начинал их учить почти одновременно, (правда ООП, С и linux до этого знал неплохо), и через неделю вполне свободно ориентировался в питоне что к чему и где лежит. В PHP такие трудности испытываю до сих пор.
lifecoder
В PHP очень помогает funcref с потрясающим количеством функций. Ну и коммьюнити, на случай, когда (очень редко) чего-то там нет.
В Питоне мне дока кажется слегка менее удобной - не знаю, из-за оформления, или из-за того, что все, касающееся библиотеки, собрано на одной громадной странице. Ну и примеров меньше, конечно. В целом, надо просто привыкнуть:)
Ed
lifecoder
Нет проблемы в коде.
Этого никто не знает, поскольку кода мы не видели. Достаточно было процитировать их неработающий пример, чтобы стало ясно о чем идет речь.

Но я все равно не понимаю, почему это не указано рядом с примерами
Ну, это-то как раз очень просто просто - документацию писали такие же люди, как мы с вами, а людям свойственно забывать и ошибаться. Видимо после отмены autocommit не поправили.
Кстати, вашим постом сюда вы вряд ли помогли исправить ситуацию в лучшую сторону. А вот если бы вы им пару строчек черкнули в их багтрекер, то это было бы более конструктивно.
lifecoder
Ed
Этого никто не знает, поскольку кода мы не видели. Достаточно было процитировать их неработающий пример, чтобы стало ясно о чем идет речь.
#дело-то не в примере.
import MySQLdb
db=MySQLdb.connect(passwd="moonpie",db="thangs")

c=db.cursor()

c.executemany(
"""INSERT INTO breakfast (name, spam, eggs, sausage, price)
VALUES (%s, %s, %s, %s, %s)""",
[
("Spam and Sausage Lover's Plate", 5, 1, 8, 7.95 ),
("Not So Much Spam Plate", 3, 2, 0, 3.95 ),
("Don't Wany ANY SPAM! Plate", 0, 4, 3, 5.95 )
] )
#для отработки на InnoDB нужен db.commit()
#кроме того, лично мой MySQL ругается нехорошими словами на строки без обрамляющих кавычек в аргументах.
Ed
А вот если бы вы им пару строчек черкнули в их багтрекер, то это было бы более конструктивно.
Правда. Но вопрос немного в другом. Если это за 5 лет никто не заметил (как и отсутствующие кавычки в строках) - значит, вероятнее, ошибка моя и я просто не знаю чего-то, что должен знать каждый питонщик.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB