Skip to main content

easy nice sql: decorator with sql

Project description

nicesql User Guide


Talk is cheap. Show me the code

"""
sqlite example

 --------------------
丨     person        丨
 --------------------
丨 id        int     丨
丨 name      string  丨
 --------------------
"""

from typing import List

from nicesql.engine import reg_engine
from nicesql.shortcut.annotate import insert, delete, update, select, ddl


class Person:
    def __init__(self):
        self.id = None
        self.name = None


def setup_module():
    reg_engine("mysql://localhost/test?user=test&password=test", alias="mysql")
    create_table()


def teardown_module():
    drop_table()


@ddl("""
create table if not exists person(
    id      integer not null primary key AUTO_INCREMENT,
    name    varchar(127)
)
""", engine="mysql")
def create_table():
    pass


@ddl("drop table if exists person", engine="mysql")
def drop_table():
    pass


# noinspection DuplicatedCode, PyMethodMayBeStatic, PyShadowingBuiltins
class TestMysql:
    @insert("insert into person(name) values({name})", engine="mysql")
    def insert(self, name: str) -> int | str:
        pass

    @delete("delete from person where id={id}", engine="mysql")
    def delete(self, id: int) -> int:
        pass

    @update("update person set name={name} where id={id}", engine="mysql")
    def update(self, id: int, name: str) -> int:
        pass

    @select("select * from person where id={ id }", model=Person, first=True, engine="mysql")
    def get(self, id: int) -> Person:
        pass

    @select("select * from person where id in ({ ids })", model=Person, engine="mysql")
    def gets(self, *ids: int) -> List[Person]:
        pass

    @select("select * from person where name like { name }", model=Person, engine="mysql")
    def find(self, name: str) -> List[Person]:
        pass

    def test_insert(self):
        name = "insert001"
        new_id = self.insert(name)

        person = self.get(new_id)
        assert person
        assert person.name == name

    def test_delete(self):
        name = "delete001"
        new_id = self.insert(name)
        assert self.delete(new_id) == 1

        person = self.get(new_id)
        assert person is None

    def test_update(self):
        name = "update001"
        update_name = "update002"
        new_id = self.insert(name)
        assert self.update(new_id, update_name) == 1
        person = self.get(new_id)
        assert person
        assert person.name == update_name

    def test_gets(self):
        name1 = "gets001"
        name2 = "gets002"
        id1 = self.insert(name1)
        id2 = self.insert(name2)
        persons = self.gets(id1, id2)
        assert len(persons) == 2
        assert persons[0].id == id1
        assert persons[1].id == id2
        assert persons[0].name == name1
        assert persons[1].name == name2

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nice-sql-1.0.0.tar.gz (6.5 kB view hashes)

Uploaded Source

Built Distribution

nice_sql-1.0.0-py3-none-any.whl (9.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page