Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 6, 2017 22:42:41

netvis
Зарегистрирован: 2017-11-06
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Несколько вопросов по БД и не только

Здравствуйте.
Изучаю самостоятельно программирование на Питоне. Кое-что непонятно, поэтому буду признателен за помощь.
1) Не могу разобраться, через какую библиотеку нужно работать с БД MySQL. Чем MySQLdb отличается от MySQLConnector? Я только понял, что последняя - это разработка Oracle, и только для версии Питона 3.4. А чем пользоваться?
2) Нигде четко не находил, но я так понял, что имена и методы что начинаются со знака подчеркивания - это служебные символы и их нельзя использовать? То есть что-то типа __cutLine() - это по-джентельменски закрытая функция?

Спасибо.

Офлайн

#2 Ноя. 7, 2017 02:17:15

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10019
Репутация: +  857  -
Профиль   Отправить e-mail  

Несколько вопросов по БД и не только

netvis
Чем MySQLdb отличается от MySQLConnector?
https://pypi.python.org/pypi/PyMySQL/0.7.11
https://pypi.python.org/pypi/mysqlclient/1.3.12
https://pypi.python.org/pypi/mysql-connector/2.1.6

Это просто разные модули для одного и того же - взаимодействия с MySQL. У них разные разработчики и разные лицензии. Ну и сами модули используются по-разному. Иногда есть модули, которые строятся на других модулях (как бы модули-адаптеры), упрощают использование.

netvis
Не могу разобраться, через какую библиотеку нужно работать с БД MySQL.
Через устойчивую и свободную, которую не бросят разработчики.

Как определить:
Заходишь на их репозиторий и смотришь
https://github.com/PyMySQL/PyMySQL/
Тут 800 коммитов, 65 контрибуторов, лицензия MIT.

Заходишь на их репозиторий и смотришь
https://github.com/sanpingz/mysql-connector
Тут 400 коммитов, 8 контрибуторов, лицензия, а где лицензия?
Это продукт от Oracle с GPL2 и исключениями по FOSS.

Oracle - это такая компания, которая хочет зарабатывать на софте. Они покупают проекты с открытым исходным кодом и пытаются их монетизировать, начинают закрывать, запрещать, требовать и так далее. Вот они купили MySQL и начались проблемы.
https://ru.wikipedia.org/wiki/MariaDB
Толчком к созданию стала необходимость обеспечения свободного статуса СУБД, в противовес политике лицензирования MySQL компанией Oracle. Основателями проекта выступили первоначальные разработчики MySQL.



Отредактировано py.user.next (Ноя. 7, 2017 02:20:50)

Офлайн

#3 Ноя. 7, 2017 02:32:33

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10019
Репутация: +  857  -
Профиль   Отправить e-mail  

Несколько вопросов по БД и не только

netvis
То есть что-то типа __cutLine() - это по-джентельменски закрытая функция?
Это во всём программировании так (касаемо языков программирования - как части всей теории программирования). Есть одно подчёркивание, его не используют, потому что оно может наскочить на уже существующие служебные имена, определённые в компиляторах. Поэтому используют двойное подчёркивание, чтобы вводить именно пользовательские служебные имена. Служебные имена - имена, не предназначенные для использования пользователем (программистом-пользователем), их программа использует для себя. Это в общем контексте, для “всех языков”.

Есть также и правила о подчёркиваниях в именах, введённые только в питоне
https://www.python.org/dev/peps/pep-0008/#naming-conventions
Одно подчёркивание в начале просто скрывает имя из внешнего описания модуля, то есть оно скрывается из документации, не участвует в импорте по звёздочке и вообще не предназначено для использования снаружи, только для внутреннего использования.
Два подчёркивания в начале действуют на наследование, такие имена как бы не наследуются и их в наследнике можно делать заново.

  
>>> class A:
...     _x = 1
...     __y = 2
... 
>>> class B(A):
...     def m1(self):
...         print(self._x)
...     def m2(self):
...         print(self.__y)
... 
>>> b = B()
>>> b.m1()
1
>>> b.m2()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in m2
AttributeError: 'B' object has no attribute '_B__y'
>>>

Ну и есть магические имена с двумя подчёркиваниями с обеих сторон имени. Это тоже служебные имена, но используемые самим питоном. Почему магические - потому что при их использовании происходит волшебство, объекты можно превращать в какие-то штуки.

  
>>> class A:
...     def __add__(self, v):
...         print('Ко мне "прибавили"', v)
... 
>>> A() + 1
Ко мне "прибавили" 1
>>>



Отредактировано py.user.next (Ноя. 7, 2017 02:43:26)

Офлайн

#4 Ноя. 7, 2017 07:48:00

netvis
Зарегистрирован: 2017-11-06
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Несколько вопросов по БД и не только

Спасибо большое!

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version