Уведомления

Группа в Telegram: @pythonsu

#1 Май 25, 2015 10:33:30

MetalHead
От: Ленгер
Зарегистрирован: 2013-12-17
Сообщения: 88
Репутация: +  1  -
Профиль   Отправить e-mail  

Импорт модуля из каталога выше

Добрый день. Имеется такая структура:
- Приложение:
— База данных(каталог):
—– actions(каталог):
——– edit.py
—– models.py

Так вот задача такая: импортировать определенные классы и объекты из файла models.py находясь в файле edit.py
Спасибо.

Отредактировано MetalHead (Май 25, 2015 10:44:30)

Офлайн

#2 Май 25, 2015 10:45:11

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Импорт модуля из каталога выше

Делайте свои каталоги пакетами и импортируйте из пакетов.



Офлайн

#3 Май 25, 2015 12:32:53

MetalHead
От: Ленгер
Зарегистрирован: 2013-12-17
Сообщения: 88
Репутация: +  1  -
Профиль   Отправить e-mail  

Импорт модуля из каталога выше

FishHook
Значит создал в каталогах пустые __init__.py, но пишет что-нет такого модуля. Пробую импортировать

import database.models
ImportError: No module named 'database'

Офлайн

#4 Май 25, 2015 12:58:23

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Импорт модуля из каталога выше

конечно, его же нет в sys.path
если вы правильно сделали структуру пакета, должно работать так

from .database import models



Офлайн

#5 Май 26, 2015 08:33:53

MetalHead
От: Ленгер
Зарегистрирован: 2013-12-17
Сообщения: 88
Репутация: +  1  -
Профиль   Отправить e-mail  

Импорт модуля из каталога выше

FishHook
извиняюсь за глупые вопросы, еще по библиотеке sys не практиковался, да и приложение таким образом не “компановал”. У меня оба __init__.py пустые как написано по вашей ссылке.
Вызываю из edit.py

>>> from .database import models
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    from .database import models
SystemError: Parent module '' not loaded, cannot perform relative import
Я так понимаю в каком-то из __init__.py пути(sys.path) нужно прописать, как Вы сказали. Направьте пожалуйста.
Пробую в database/__init__.py
import sys
sys.path.insert(1, '/actions/')

Отредактировано MetalHead (Май 26, 2015 08:40:11)

Офлайн

#6 Май 26, 2015 08:37:32

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Импорт модуля из каталога выше

Не видя кода трудно что-то советовать. Выкладывайте сюда архив с программой.



Офлайн

#7 Май 26, 2015 08:44:29

MetalHead
От: Ленгер
Зарегистрирован: 2013-12-17
Сообщения: 88
Репутация: +  1  -
Профиль   Отправить e-mail  

Импорт модуля из каталога выше

database/models.py

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey
class BaseClass:
    def __init__(self):
        self.baseDeclarative = declarative_base()
        self.baseEngine = create_engine('sqlite:///shop.db')
declarativeObject = BaseClass()
class Goods(declarativeObject.baseDeclarative):
    __tablename__ = 'goods'
    id = Column(Integer, primary_key = True)
    name = Column(String(250))
    model = Column(String(250))
    purchase = Column(Integer)
    price = Column(Integer)
    presence = Column(Integer)
    sale = Column(Integer)
    red_presence = Column(Integer, default=3)
    last_sale_date = Column(Integer)
    last_import = Column(Integer)
    alphabet = Column(String(10))
if __name__ == "__main__":
    declarativeObject.baseDeclarative.metadata.create_all(declarativeObject.baseEngine)
database/actions/edit.py
from models import declarativeObject as model
from models import Goods
from sqlalchemy.orm import sessionmaker
class InitQueries:
    def __init__(self):
        model.baseDeclarative.metadata.bind = model.baseEngine
        dbSession = sessionmaker(bind=model.baseEngine)
        self.session = dbSession()
init = InitQueries()
class GoodsAction:
    def select(self, ident=None, alphabet=None):
        try:
            if ident == None and alphabet == None:
                rows = init.session.query(Goods).filter(Goods.alphabet == "А").all()
                return rows
            if ident == None and alphabet != None:
                rows = init.session.query(Goods).filter(Goods.alphabet == alphabet).all()
                return rows
            if ident != None:
                row = init.session.query(Goods).filter(Goods.id == ident).one()
                return row
        except:
            return "Ошибка выборки"
            pass
    def add(self, name, model, purchase, price, presence, sale, red_presence, last_import, alphabet):
        try:
            addRow = Goods(name=name, model=model, purchase=purchase,
                           price=price,presence=presence, sale=sale,
                           red_presence=red_presence, last_import=last_import,
                           alphabet=alphabet)
            
            init.session.add(addRow)
            init.session.commit()
            print ("Добавлено")
        except:
            return "Ошибка добавления записи"
if __name__ == "__main__":
    goods = GoodsAction()
З.Ы. как писал выше, __init__.py в каталогах пустые.

Отредактировано MetalHead (Май 26, 2015 08:46:19)

Офлайн

#8 Май 26, 2015 08:50:22

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Импорт модуля из каталога выше

Вы не понимаете, что важна структура проекта? Если бы мне нужны были ваши функции и классы, я бы так и сказал: покажите код. Я прошу весь проект в виде архива.



Офлайн

#9 Май 27, 2015 12:28:39

MetalHead
От: Ленгер
Зарегистрирован: 2013-12-17
Сообщения: 88
Репутация: +  1  -
Профиль   Отправить e-mail  

Импорт модуля из каталога выше

FishHook
пожалуйста

Прикреплённый файлы:
attachment project.rar (10,2 KБ)

Офлайн

#10 Май 27, 2015 13:15:52

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Импорт модуля из каталога выше

Как то так



Прикреплённый файлы:
attachment database.zip (15,2 KБ)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version