A common crud framework for web.
Project description
pycrud
A common crud framework for web.
The project moved to https://pypi.org/project/pycrud/
Features:
-
Generate query by json or dsl
-
Role based permission system
-
Easy to integrate with web framework
-
Tested coveraged
Examples:
Define
from typing import Optional
from playhouse.db_url import connect
from pycurd.crud.ext.peewee_crud import PeeweeCrud
from pycurd.types import RecordMapping
class User(RecordMapping):
id: Optional[int]
nickname: str
username: str
password: str = 'password'
db = connect("sqlite:///:memory:")
c = PeeweeCrud(None, {
User: 'users'
}, db)
Create
from pycurd.values import ValuesToWrite
v = ValuesToWrite({'nickname': 'wwww', 'username': 'u2'})
lst = await c.insert_many(User, [v])
print(lst)
Read
from pycurd.query import QueryInfo
# from dsl
lst = await c.get_list(QueryInfo.from_table_raw(User, where=[
User.id != 1
]))
# from json
lst = await c.get_list(QueryInfo.from_json(User, {
'id.eq': 1
}))
print([x.to_dict() for x in lst])
Update
from pycurd.query import QueryInfo
from pycurd.values import ValuesToWrite
v = ValuesToWrite({'nickname': 'bbb', 'username': 'u2'})
# from dsl
lst = await c.update(QueryInfo.from_table_raw(User, where=[
User.id.in_([1, 2, 3])
]))
# from json
lst = await c.update(QueryInfo.from_json(User, {
'id.in': [1,2,3]
}), v)
print(lst)
Delete
from pycurd.query import QueryInfo
lst = await c.delete(QueryInfo.from_json(User, {
'id.in': [1,2,3]
}))
print(lst)
Query by json
from pycurd.query import QueryInfo
# $or: (id < 3) or (id > 5)
QueryInfo.from_json(User, {
'$or': {
'id.lt': 3,
'id.gt': 5
}
})
# $and: 3 < id < 5
QueryInfo.from_json(User, {
'$and': {
'id.gt': 3,
'id.lt': 5
}
})
# $not: not (3 < id < 5)
QueryInfo.from_json(User, {
'$not': {
'id.gt': 3,
'id.lt': 5
}
})
# multiple same operator: (id == 3) or (id == 4) or (id == 5)
QueryInfo.from_json(User, {
'$or': {
'id.eq': 3,
'id.eq.2': 4,
'id.eq.3': 5,
}
})
# multiple same operator: (3 < id < 5) or (10 < id < 15)
QueryInfo.from_json(User, {
'$or': {
'$and': {
'id.gt': 3,
'id.lt': 5
},
'$and.2': {
'id.gt': 10,
'id.lt': 15
}
}
})
Query by DSL
# $or: (id < 3) or (id > 5)
(User.id < 3) | (User.id > 5)
# $and: 3 < id < 5
(User.id > 3) & (User.id < 5)
# $not: not (3 < id < 5)
~((User.id > 3) & (User.id < 5))
# multiple same operator: (id == 3) or (id == 4) or (id == 5)
(User.id != 3) | (User.id != 4) | (User.id != 5)
# multiple same operator: (3 < id < 5) or (10 < id < 15)
((User.id > 3) & (User.id < 5)) | ((User.id > 10) & (User.id < 15))
Operators
type | operator | text |
---|---|---|
compare | EQ | ('eq', '==') |
compare | NE | ('ne', '!=') |
compare | LT | ('lt', '<') |
compare | LE | ('le', '<=') |
compare | GE | ('ge', '>=') |
compare | GT | ('gt', '>') |
relation | IN | ('in',) |
relation | NOT_IN | ('notin', 'not in') |
relation | IS | ('is',) |
relation | IS_NOT | ('isnot', 'is not') |
relation | PREFIX | ('prefix',) |
relation | CONTAINS | ('contains',) |
logic | AND | ('and',) |
logic | OR | ('or',) |
// usage:
{
'time.ge': 1,
'$or': {
'id.in': [1, 2, 3],
'$and': {
'time.ge': 100,
'time.le': 500,
}
}
}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
pycurd-0.2.3.tar.gz
(20.0 kB
view details)
Built Distribution
pycurd-0.2.3-py3-none-any.whl
(25.4 kB
view details)
File details
Details for the file pycurd-0.2.3.tar.gz
.
File metadata
- Download URL: pycurd-0.2.3.tar.gz
- Upload date:
- Size: 20.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.2 CPython/3.8.3 Windows/10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 934d62aefd19da61149532721e3c38f0a1f066a8d6d8c8880b581535b7293976 |
|
MD5 | 963bf0ecf98cdabe65944d6b3461093d |
|
BLAKE2b-256 | d89eb209da57698a0e4911e0c3ddcad4443342580b41deb06351b7d5dd2bebe7 |
File details
Details for the file pycurd-0.2.3-py3-none-any.whl
.
File metadata
- Download URL: pycurd-0.2.3-py3-none-any.whl
- Upload date:
- Size: 25.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.2 CPython/3.8.3 Windows/10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 522921c8576d0866f5ecbd6865e6771d8042da0257546725b494be6479850e0e |
|
MD5 | bbacadb0fd25e3982a68984d5386f10f |
|
BLAKE2b-256 | 4cae3425c51b35fc69ac3ec2238ae33418a0259f17b3d4a538f988a4ee6de836 |