LINUX.ORG.RU

Django Python3 Mysql Exception ignored | ResourceWarning

 , ,


0

1

Ubuntu 14.04. Версия Django 1.6(ставил из изходников), пробую использовать БД Mysql, но Django ORM не может в Python3. Поставил mysql-connector-python из репозитория всё запустилось. Но при работе с БД, периодически в консоль сыпятся сообщения вида:

Exception ignored in: <socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketType.SOCK_STREAM, proto=6, laddr=('127.0.0.1', 57006), raddr=('127.0.0.1', 3306)>
ResourceWarning: unclosed <socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketType.SOCK_STREAM, proto=6, laddr=('127.0.0.1', 57006), raddr=('127.0.0.1', 3306)>
Exception ignored in: <socket.socket fd=11, family=AddressFamily.AF_INET, type=SocketType.SOCK_STREAM, proto=6, laddr=('127.0.0.1', 57010), raddr=('127.0.0.1', 3306)>
ResourceWarning: unclosed <socket.socket fd=11, family=AddressFamily.AF_INET, type=SocketType.SOCK_STREAM, proto=6, laddr=('127.0.0.1', 57010), raddr=('127.0.0.1', 3306)>

Не могу понять как отловить этот Exception. Пробовал:

try:
   db.get(...)
except BaseException as E:
   print(E)
Как отловить исключение, либо просто узнать из-за чего ошибка? Может быть её можно смело проигнорить.

Есть еще вариант сменить БД, Postgress не хочу, sqlite не могу(нет регистронезависемого поиска по русскому языку). Данных очень мало 3 таблицы макс по 200 значений в каждой. Между таблицами нужна связи ко ключу. Есть какие-нибудь безгеморные варианты?

Отличная мотивация для отказа перехода на другую субд: «не хочу». Хотя это, конечно, не метод.

Mahmood
()

Джангу не знаю, но BaseException не предназначено для отлавливания вручную.

except Exception as E:
   print(type(E))
Что пишет?

metrokto ★★
()

Django ORM не может в Python3.

Откуда дровишки? Может это одна из зависимостей в системе не может в питон 3?

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Имелась ввиду работа с MySQL. С остальным проблем не было.

greek_31 ★★
() автор топика
Ответ на: комментарий от metrokto

всё очень плохо

 Warning {message : ResourceWarning('unclosed <socket.socket fd=12, family=AddressFamily.AF_UNIX, type=SocketType.SOCK_STREAM, proto=0, raddr=/var/run/mysqld/mysqld.sock>',), category : 'ResourceWarning', filename : '/usr/local/lib/python3.4/dist-packages/django/db/models/sql/query.py', lineno : 1265, line : None}
Строка 1265
path, names_with_path = [], [] 

Контекст строки из django/models/sql/query.py

class Query(object):
 ....
    def names_to_path(self, names, opts, allow_many, allow_explicit_fk):
        """
        Walks the names path and turns them PathInfo tuples. Note that a
        single name in 'names' can generate multiple PathInfos (m2m for
        example).

        'names' is the path of names to travle, 'opts' is the model Options we
        start the name resolving from, 'allow_many' and 'allow_explicit_fk'
        are as for setup_joins().

        Returns a list of PathInfo tuples. In addition returns the final field
        (the last used join field), and target (which is a field guaranteed to
        contain the same value as the final field).
        """
        path, names_with_path = [], []
        for pos, name in enumerate(names):
            cur_names_with_path = (name, [])
            if name == 'pk':
                name = opts.pk.name
            try:
                field, model, direct, m2m = opts.get_field_by_name(name)
            except FieldDoesNotExist:
                for f in opts.fields:
                    if allow_explicit_fk and name == f.attname:
                        # XXX: A hack to allow foo_id to work in values() for
                        # backwards compatibility purposes. If we dropped that
                        # feature, this could be removed.
                        field, model, direct, m2m = opts.get_field_by_name(f.name)
                        break
                else:
                    available = opts.get_all_field_names() + list(self.aggregate_select)
                    raise FieldError("Cannot resolve keyword %r into field. "
                                     "Choices are: %s" % (name, ", ".join(available)))
            # Check if we need any joins for concrete inheritance cases (the
            # field lives in parent, but we are currently in one of its
            # children)
            if model:
                # The field lives on a base class of the current model.
                # Skip the chain of proxy to the concrete proxied model
                proxied_model = opts.concrete_model

                for int_model in opts.get_base_chain(model):
                    if int_model is proxied_model:
                        opts = int_model._meta
                    else:
                        final_field = opts.parents[int_model]
                        targets = (final_field.rel.get_related_field(),)
                        opts = int_model._meta
                        path.append(PathInfo(final_field.model._meta, opts, targets, final_field, False, True))
                        cur_names_with_path[1].append(PathInfo(final_field.model._meta, opts, targets, final_field, False, True))
            if hasattr(field, 'get_path_info'):
                pathinfos = field.get_path_info()
                if not allow_many:
                    for inner_pos, p in enumerate(pathinfos):
                        if p.m2m:
                            cur_names_with_path[1].extend(pathinfos[0:inner_pos + 1])
                            names_with_path.append(cur_names_with_path)
                            raise MultiJoin(pos + 1, names_with_path)
                last = pathinfos[-1]
                path.extend(pathinfos)
                final_field = last.join_field
                opts = last.to_opts
                targets = last.target_fields
                cur_names_with_path[1].extend(pathinfos)
                names_with_path.append(cur_names_with_path)
            else:
                # Local non-relational field.
                final_field = field
                targets = (field,)
                break

        if pos != len(names) - 1:
            if pos == len(names) - 2:
                raise FieldError(
                    "Join on field %r not permitted. Did you misspell %r for "
                    "the lookup type?" % (name, names[pos + 1]))
            else:
                raise FieldError("Join on field %r not permitted." % name)
        return path, final_field, targets

greek_31 ★★
() автор топика
Ответ на: комментарий от greek_31

Мне кажется, ты не те исходники смотришь потому что по тому номеру

Этот фрагмент исходника ты взял из /usr/local/lib/python3.4/dist-packages/django/db/models/sql/query.py? Мне кажется тут или номера строк не совпадают, или этот код, например, вызывается из C или ещё как-то хитро.

true_admin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.