快速入门
注意
在本页中,您将学习如何使用 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
下一步
我们只是触及了您可以做的事情的表面。阅读我们的 高级教程 以了解更复杂的查询以及如何查询关系。