Подстрока из избранных в Peewee ORM - PullRequest
0 голосов
/ 08 октября 2019

Я обновляю кодовую базу для моей программы с Peewee v2 до v3. В коде я выполняю подстроку внутри оператора select, которая всегда работала в v2, но теперь больше не работает. У меня есть следующая таблица

class Project(BaseModel):
project_id = CharField(column_name='projectID', primary_key=True)
name = CharField()
relative_path = CharField()
product_id = ForeignKeyField(column_name='productID', model=Product, field='product_id')

class Meta:
    table_name = 'project'
    indexes = (
        (('name', 'product_id'), True),
    )

, и мой запрос выглядит следующим образом:

project_prefix = "INH"

query = internal_projects = Project.select(fn.substring(Project.project_id, len(project_prefix) + 1))\
.where(Project.project_id.startswith(project_prefix))

for q in query:
    print q

Это дает мне результат:

None
None
None
None
None
None
None

Однако, если яоставьте строку fn.substring в моем запросе, результаты будут просто хорошими, например:

INH00001
INH00002
INH00004
INH00005
INH00006
INH00007
INH00008

В тех случаях, когда я получаю «None» в первом запросе, совпадают с количеством результатов во втором, так что это определенновыбирая что-то. Как я могу заставить мой первый запрос работать снова, чтобы получить результаты, как и ожидалось? например:

00001
00002
00004
00005
00006
00007
00008

1 Ответ

0 голосов
/ 08 октября 2019

Я предполагаю что-то необычное в том, как вы получаете доступ к атрибуту. Попробуйте указать псевдоним явно:

pid = fn.substring(Project.project_id, len(prefix + 1))
query = (Project
         .select(pid.alias('pid'))
         .where(Project.project_id.startswith(prefix)))

for project in query:
    print(project.pid)
...