跳至内容

基于模型的访问

除了使用传统的基于客户端的访问方法外,您还可以直接从 Python 模型本身进行查询

from prisma.models import User

user = await User.prisma().create(
    data={
        'name': 'Robert',
    },
)

注意

这与 Active Record 模式 不同。

这些模型(就像使用基于客户端的访问创建的模型一样)携带持久数据,但没有实现任何对数据进行操作的行为。例如,更新记录看起来像这样

user = await User.prisma().update(
    where={
        'id': user.id,
    },
    data={
        'name': 'Robert',
    },
)

注册客户端实例

为了使用基于模型的访问进行查询,您必须首先创建并注册一个客户端实例,例如

from prisma import Prisma

db = Prisma(auto_register=True)

或者像这样

import prisma

prisma.register(prisma.Prisma())

您只能在同一个 Python 进程中执行此操作一次。

您还可以传递一个返回客户端实例的函数。

from prisma import Prisma, register

def get_client() -> Prisma:
    return Prisma()

register(get_client)

用法

所有查询操作与 基于客户端的访问 完全相同。

将基于客户端的访问操作转换为基于模型的访问操作只需要更改类似的调用:db.userUser.prisma()

示例

创建记录

from prisma.models import User

user = await User.prisma().create(
    data={
        'name': 'Robert',
    },
)

查找唯一记录

from prisma.models import User

user = await User.prisma().find_unique(
    where={
        'id': '2',
    },
    include={
        'posts': True,
    },
)

查找多个记录

from prisma.models import Post

posts = await Post.prisma().find_many(
    take=5,
    skip=1,
    where={
        'published': True,
    },
    cursor={
        'id': 'desc',
    },
    include={
        'categories': True,
    },
    order={
        'id': 'desc',
    }
}

更新唯一记录

from prisma.models import Post

post = await Post.prisma().update(
    where={
        'id': 'cksc9lp7w0014f08zdkz0mdnn',
    },
    data={
        'views': {
            'increment': 1,
        }
    },
    include={
        'categories': True,
    }
)

执行原始查询

警告

SQL 查询直接发送到数据库,因此您必须使用特定数据库提供程序的语法

from prisma.models import user

users = await User.prisma().query_raw(
    'SELECT * FROM User WHERE name = "?"', 'Robert'
)
from prisma.models import user

user = await User.prisma().query_first(
    'SELECT * FROM User WHERE name = "?" LIMIT 1', 'Robert'
)