跳至内容

快速入门

注意

改编自 Prisma Client Go 文档

在本页中,您将学习如何使用 Prisma Client Python 向 SQLite 数据库发送查询并运行静态类型检查。

设置

1) 使用 虚拟环境 设置 Python 项目

mkdir demo && cd demo
python3 -m venv .venv

2) 激活虚拟环境

请注意,您需要在每个新的 shell 实例上运行激活命令。

平台 Shell 激活命令
POSIX bash/zsh $ source .venv/bin/activate
fish $ source .venv/bin/activate.fish
csh/tcsh $ source .venv/bin/activate.csh
PowerShell Core $ .venv/bin/Activate.ps1
Windows cmd.exe C:\> .venv\Scripts\activate.bat
PowerShell PS C:\> .venv\Scripts\Activate.ps1

3) 安装 Prisma Client Python

pip install prisma

4) 在 schema.prisma 文件中准备您的数据库模式。

例如,一个带有 sqlite 数据库和一个模型的简单模式看起来像这样

datasource db {
  // could be postgresql or mysql
  provider = "sqlite"
  url      = "file:dev.db"
}

generator db {
  provider             = "prisma-client-py"
  interface            = "asyncio"
  recursive_type_depth = 5
}

model Post {
  id         String   @id @default(cuid())
  created_at DateTime @default(now())
  updated_at DateTime @updatedAt
  title      String
  published  Boolean
  desc       String?
}

为了在您的数据库中运行它,我们使用 Prisma 迁移工具 db push 来创建和迁移我们的数据库

prisma db push

如果您对 prisma 模式进行了更改,则需要再次运行此命令。

注意

db push 命令还会为您生成客户端。如果您想在不修改数据库的情况下生成客户端,请使用以下命令

prisma generate

提示

您可以添加 --watch 标志,以便在您修改 schema.prisma 文件时重新生成客户端

prisma generate --watch

用法

创建一个文件 main.py

import asyncio

from prisma import Prisma


async def main() -> None:
    db = Prisma()
    await db.connect()

    post = await db.post.create(
        {
            'title': 'Hello from prisma!',
            'desc': 'Prisma is a database toolkit and makes databases easy.',
            'published': True,
        }
    )
    print(f'created post: {post.json(indent=2, sort_keys=True)}')

    found = await db.post.find_unique(where={'id': post.id})
    assert found is not None
    print(f'found post: {found.json(indent=2, sort_keys=True)}')

    await db.disconnect()


if __name__ == '__main__':
    asyncio.run(main())

并运行它

python main.py
created post: {
  "created_at": "2021-01-04T00:30:35.921000+00:00",
  "desc": "Prisma is a database toolkit and makes databases easy.",
  "id": "ckjhtv79t0000y1uicwrgt605",
  "published": true,
  "title": "Hello from prisma!",
  "updated_at": "2021-01-04T00:30:35.921000+00:00"
}
found post: {
  "created_at": "2021-01-04T00:30:35.921000+00:00",
  "desc": "Prisma is a database toolkit and makes databases easy.",
  "id": "ckjhtv79t0000y1uicwrgt605",
  "published": true,
  "title": "Hello from prisma!",
  "updated_at": "2021-01-04T00:30:35.921000+00:00"
}

静态类型检查

设置

注意

我是 pyright PyPI 包 的维护者,它是 官方版本 的包装器,由微软维护。

1) 安装 pyright

pip install pyright

2) 创建一个 pyproject.toml 文件

[tool.pyright]
include = [
    "main.py",
]

typeCheckingMode = "strict"

用法

pyright
Found 1 source file
0 errors, 0 warnings, 0 infos
Completed in 1.322sec

错误报告

例如,将以下行添加到 main() 函数的末尾

async def main() -> None:
    ...
    print(f'Invalid field: {post.invalid_field}')

运行 pyright 现在将输出错误

pyright
Found 1 source file
/prisma-py-quickstart/main.py
  /prisma-py-quickstart/main.py:22:34 - error: Cannot access member "invalid_field" for type "Post"
    Member "invalid_field" is unknown (reportGeneralTypeIssues)
  /prisma-py-quickstart/main.py:22:29 - error: Type of "invalid_field" is unknown (reportUnknownMemberType)
2 errors, 0 warnings, 0 infos
Completed in 1.947sec

当您尝试通过不存在的字段进行查询时,pyright 也会报错,例如

async def main() -> None:
    ...
    found = await db.post.find_unique(where={'unknown_field': post.id})
    ...

pyright
Found 1 source file
/prisma-py-quickstart/main.py
  /programming/prisma-py-quickstart/main.py:22:45 - error: Argument of type "dict[str, str]" cannot be assigned to parameter "where" of type "PostWhereUniqueInput" in function "find_unique"
    "unknown_field" is an undefined field in type "PostWhereUniqueInput" (reportGeneralTypeIssues)
1 error, 0 warnings, 0 infos
Completed in 1.884sec

下一步

我们只是触及了您可以做的事情的表面。阅读我们的 高级教程 以了解更复杂的查询以及如何查询关系。