Peewee在python控制台中检索数据,但不在应用程序中检索

时间:2018-12-17 14:30:57

标签: python database peewee

我有在Python中使用peewee设计的实体。在开始实现真实数据库之前,我已经对内存数据库进行了一些测试。当我开始实现数据库功能时,我遇到了奇怪的问题。我的查询返回空结果,这还要取决于我运行脚本还是使用python控制台。

首先,让我证明逻辑是正确的。当我使用python控制台时,一切正常:

>>> from Entities import *
>>> print (RouterSettings.select().where(RouterSettings.name=='RUT00').get().name)
RUT00

如您所见,一切都正确。执行特定查询并返回结果。现在在脚本中相同:

from Entities import *
print (RouterSettings.select().where(RouterSettings.name=='RUT00').get().name)

此返回异常实例匹配查询不存在

  

打印   (RouterSettings.select()。其中​​(RouterSettings.name =='RUT00')。get()。name)   文件   “ C:\ Users \ Kamil \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ peewee.py”,   5975行,进入       (clone.model,sql,params))Entities.RouterSettingsDoesNotExist:实例匹配查询不存在:SQL:   选择“ t1”。“ id”,“ t1”。“名称”,“ t1”。“ ip”,“ t1”。“用户名”,   “ t1”。“密码”,“ t1”。“模型”,“ t1”。“ phone_num”,“ t1”。“提供者”,   来自“ routersettings”的“ t1”。“位置”,如“ t1”所在(“ t1”。“名称” =?)   LIMIT?抵消?参数:['RUT00',1,0]

当我尝试调试时,我发现数据库好像没有创建: enter image description here 请注意,在调试变量中,数据库对象为空(无)。 你有什么想法吗?

我的实体定义如下:

from peewee import *


class EnumField(IntegerField):

    def __init__(self, *argv):
        super().__init__()
        self.enum = []
        for label in argv:
            self.enum.append(label)

    def db_value(self, value):
        try:
            return self.enum.index(value)
        except ValueError:
            raise EnumField.EnumValueDoesnExistError(
                "Value doesn\'t exist in enum set.\nMaybe you forgot to add "
                "that one: " + value + "?")

    def python_value(self, value):
        try:
            return self.enum[value]
        except IndexError:
            raise EnumField.EnumValueDoesnExistError(
                'No value for given id')

    class EnumValueDoesnExistError(Exception):
        pass

class ModelField(EnumField):

    def __init__(self):
        super().__init__('RUT955_Q', 'RUT955_H', 'GLiNet300M')

class ProviderField(EnumField):

    def __init__(self):
        super().__init__('Orange', 'Play', 'Virgin')


class BaseModel(Model):
    class Meta:
        database = SqliteDatabase('SIMail.db', pragmas={'foreign_keys': 1})


class RouterSettings(BaseModel):

    name = CharField(unique=True)
    ip = CharField(unique=True)
    username = CharField()
    password = CharField()
    model = ModelField()
    phone_num = IntegerField(unique=True)
    provider = ProviderField()
    location = CharField()

1 个答案:

答案 0 :(得分:1)

您可能正在使用数据库文件的相对路径来运行它,并且在运行应用程序和控制台时(取决于当前工作目录),它使用不同的数据库文件。