MagicStack / MagicStack/asyncpg
Difference between bulk update with FROM VALUES and without it?
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 8.1k
- Forks
- 468
- PR merge metrics
- No merged PRs in 30d
Description
```python3
await conn.executemany(
"""
UPDATE user SET login=$2, name=$3, age=$4, sex=$5
WHERE id=$1
""",
users,
)
```
```python3
await conn.executemany(
"""
UPDATE user SET login=actual_user.login, name=actual_user.name, age=actual_user.age, sex=actual_user.sex
FROM (VALUES ($1, $2, $3, $4, $5)) AS actual_user (id, login, name, age::integer, sex::integer)
WHERE user.id=actual_user.id
""",
users,
)
```
The first is cleaner. But I worry about performance. I know the second is performed as one request. But the first is the same?
Is there any reason to use the second way?
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with asyncpg's executemany entry point and PostgreSQL's UPDATE ... FROM VALUES semantics, comparing both SQL examples and their request behavior. Done would be a clear documented explanation of whether the approaches differ in performance or purpose, and when the second form is useful.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- postgresql, python
- Domain
- databases
- Issue type
- Documentation
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100