Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 2, 2010 15:15:30

lifecoder
От:
Зарегистрирован: 2010-11-02
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Как читать документацию?

Люди, подскажите, пожалуйста, что я делаю неправильно..

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

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

Но, если это так, то почему этого нет в примерах (которых аж 3 штуки на официальном http://mysql-python.sourceforge.net/MySQLdb.html ..), и где умные люди это ищут, чтобы не убить кучу времени на поиск несуществующей ошибки?



Офлайн

#2 Ноя. 2, 2010 17:14:35

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Как читать документацию?

lifecoder
ну надо же, это, оказывается, транзакция была - и все выполняется по коммиту
1. Вы раньше работали с реляционными базами данных? Если да, то почему это для вас такая неожиданность?
2. В Python есть принятый интерфейс для работы с реляционными базами данных, называется Python DB API. Практически любой коннектор к БД на Python будет работать согласно этому документу.



Отредактировано (Ноя. 2, 2010 17:14:52)

Офлайн

#3 Ноя. 2, 2010 18:28:51

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Как читать документацию?

lifecoder
Люди, подскажите, пожалуйста, что я делаю неправильно..
Вы описываете проблему в вашем коде на форуме программистов, не показывая код.



Офлайн

#4 Ноя. 3, 2010 12:26:44

lifecoder
От:
Зарегистрирован: 2010-11-02
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Как читать документацию?

regall
1. Вы раньше работали с реляционными базами данных? Если да, то почему это для вас такая неожиданность?
2. В Python есть принятый интерфейс для работы с реляционными базами данных, называется Python DB API. Практически любой коннектор к БД на Python будет работать согласно этому документу.
1. Я раньше работал с MySQL в PHP и напрямую, и ожидал, что работа с MySQL в питоне не отличается. Или, если отличается это как-то отображается в описании/примерах:)
2. Спасибо, буду знать.

Ed
Вы описываете проблему в вашем коде на форуме программистов, не показывая код.
Нет проблемы в коде. Есть проблема в понимании. Точнее, непонимании, почему в документации модуля указан пример без коммита, и нет никаких отсылок. Собственно, тут и моя ошибка, в FAQ есть пункт, в котором говориться, что с версии 1.2.0 (выпущенной 06.2005) отключен автокоммит. Но я все равно не понимаю, почему это не указано рядом с примерами, и это не спасло меня от долгих поисков ошибки в запросе. Спасло меня то, что попался пример с созданием таблицы - когда таблица создается, а инсерты не работают - приходит просветление..



Офлайн

#5 Ноя. 3, 2010 12:38:28

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Как читать документацию?

lifecoder
Я раньше работал  с MySQL в PHP и напрямую, и ожидал, что работа с MySQL в питоне не отличается
1. Да, в PHP по умолчанию транзакция заканчивается после выполнения запроса. Ну, это не сильно безопасно. Более безопасный подход с точки зрения разработки - явно что-то предоставлять, чем явно что-то запрещать (уберегает от механических ошибок).
2. По идее у вас хранилище InnoDB или BerkleyDB (BDB), при MyISAM транзакционности в принципе нет (только локи таблиц), так что должно работать и без явного коммита.



Офлайн

#6 Ноя. 3, 2010 12:53:46

lifecoder
От:
Зарегистрирован: 2010-11-02
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Как читать документацию?

Вообще, это я просто ною:) Ожидал пресловутую “скорость разработки”, а тут грабли) Ну и разбалованность поддержкой PHP сказывается.



Офлайн

#7 Ноя. 3, 2010 13:13:18

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

Как читать документацию?

Из своего опыта и пока свежо воспоминание, Python явно превосходит PHP по скорости освоения (изучения) языка. Начинал их учить почти одновременно, (правда ООП, С и linux до этого знал неплохо), и через неделю вполне свободно ориентировался в питоне что к чему и где лежит. В PHP такие трудности испытываю до сих пор.



Офлайн

#8 Ноя. 3, 2010 13:52:02

lifecoder
От:
Зарегистрирован: 2010-11-02
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Как читать документацию?

В PHP очень помогает funcref с потрясающим количеством функций. Ну и коммьюнити, на случай, когда (очень редко) чего-то там нет.
В Питоне мне дока кажется слегка менее удобной - не знаю, из-за оформления, или из-за того, что все, касающееся библиотеки, собрано на одной громадной странице. Ну и примеров меньше, конечно. В целом, надо просто привыкнуть:)



Офлайн

#9 Ноя. 3, 2010 20:17:04

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Как читать документацию?

lifecoder
Нет проблемы в коде.
Этого никто не знает, поскольку кода мы не видели. Достаточно было процитировать их неработающий пример, чтобы стало ясно о чем идет речь.

Но я все равно не понимаю, почему это не указано рядом с примерами
Ну, это-то как раз очень просто просто - документацию писали такие же люди, как мы с вами, а людям свойственно забывать и ошибаться. Видимо после отмены autocommit не поправили.
Кстати, вашим постом сюда вы вряд ли помогли исправить ситуацию в лучшую сторону. А вот если бы вы им пару строчек черкнули в их багтрекер, то это было бы более конструктивно.



Офлайн

#10 Ноя. 4, 2010 11:13:58

lifecoder
От:
Зарегистрирован: 2010-11-02
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Как читать документацию?

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 лет никто не заметил (как и отсутствующие кавычки в строках) - значит, вероятнее, ошибка моя и я просто не знаю чего-то, что должен знать каждый питонщик.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version