2016-03-30 4 views
1

Является новым для Python. Я работаю над проектом с использованием Peewee ORM и Bottle.Как я могу получить доступ к глобальной переменной в внутреннем классе python

В моем файле models.py есть мои модели. Моя переменная «db» определена в моем основном файле (index.py). Я хотел бы получить доступ к тому же экземпляру «db», используя глобальный в базовом классе BaseModel Meta ниже.

from peewee import * 
import settings 

class BaseModel(Model): 
    global db 
    class Meta: 
     global db 
     database = db 

class Account(BaseModel): 
    created_ip = CharField(null=True) 
    created_on = DateTimeField() 

Я получаю ошибку ниже, когда я пытаюсь запустить код

Traceback (most recent call last): 
    File "index.py", line 11, in <module> 
    from models import Account, Crawl, Site, Url 
    File "/api/models.py", line 4, in <module> 
    class BaseModel(Model): 
    File "/api/models.py", line 7, in BaseModel 
    class Meta: 
    File "/api/models.py", line 9, in Meta 
    database = db 
NameError: name 'db' is not defined 

Могу ли я получить доступ к глобальной «DB» во внутреннем классе, есть более простой способ использовать глобальный «дб "экземпляр в другом файле?

Спасибо

+0

Вы не назначенную 'db' значение в этом модуле. Глобалы - это модули. – kindall

+0

Я просто хочу убедиться, что понимаю, что вы говорите. Если я определяю глобальное значение в одном файле, я не смогу использовать его значение в другом файле, даже если я импортировал определяющий файл? – user964491

ответ

2

Не определяйте свой db экземпляр базы данных внутри основного файла. Держите его с вашими моделями в models.py. И, в соответствии с documentation, рекомендуется иметь базовую модель с, который обладал бы database «мета» атрибут определен:

db = SqliteDatabase('my_app.db') 

class BaseModel(Model): 
    class Meta: 
     database = db 

class User(BaseModel): 
    username = CharField() 
+0

Спасибо за ваш ответ, у меня было это изначально, но мое приложение выросло, чтобы включить файл manager.py, где мне также нужно использовать экземпляр db, у меня также есть этот вопрос для совместного использования моего экземпляра redis через файлы кода. – user964491

+0

@ user964491 в порядке, спасибо, тогда у вас есть 'db', импортированный из этого менеджера:' from manager import db'. В любом случае использование 'global' определенно не способ. – alecxe

+0

в фрагменте кода Я импортирую переменную экземпляра «db» из файла settings.py, на данный момент я не хочу передавать экземпляр db везде, где он мне нужен, плюс документация peewee не объясняет, как я могу передайте экземпляр db непосредственно в классы модели или если я могу передать его конструктору в классе BaseModel, я понимаю, что это не лучшая практика, но я не спрашиваю о лучших практиках, которые я прошу, если это возможно, спасибо для вашего ответа, хотя – user964491