A simple python library for managing a SQLite database
pip install NotAOrm or git clone https://github.com/ludel/NotAOrm.git in your project
There are no hard dependencies other than the Python standard library. NotAOrm run with python 3.6+.
| SQL | Python | lib | Args | Note |
|---|---|---|---|---|
| INTEGER | int |
Int |
not_null, unique, default, primary_key |
Automatic incrementation is activated when the primary_key argument is true |
| FLOAT | float |
Float |
not_null, unique, default |
|
| VARCHAR | str |
Varchar |
not_null, unique, default, length |
By default length is 255 |
| TEXT | str |
Text |
length, not_null, unique, default |
By default length is 5000 |
| DATE | datetime.date |
Date |
not_null, unique, default |
if default argument is set to now, the date will be automatically generate |
| TIMESTAMP | datetime.datetime |
Datetime |
not_null, unique, default |
Same as Date |
| BOOLEAN | bool |
Bool |
not_null, unique, default |
|
| FOREIGN KEY | Relation |
ForeignKey |
reference, not_null, unique, default |
Reference argument must be a Table object |
import notaorm
from notaorm.table import Table
from notaorm.datatype import Int, Varchar, Date
notaorm.database = 'test.db'
site = Table('site', rows=(
Int('id', primary_key=True, not_null=True),
Varchar('url', length=255, unique=True, not_null=True),
Int('visitor', default=0),
Date('last_check', default='now')
))
site.create()site.show.get(site.url == 'google.com')or if we want specific columns
site.show.get(site.url.end_with('.com'), columns=[site.url, site.last_check])all_sites = site.show.all()
for site in all_sites:
print('=>', site.id, site.url, site.visitor, site.last_check, sep='\t')We can order and limit the request
order_asc_sites = site.show.all(order_by=site.last_check, limit=3)
order_desc_sites = site.show.all(order_by_desc=site.last_check, limit=3)filter_sites = site.show.filter(site.visitor >= 10, site.id)
for site in filter_sites:
print('=>', site.id, sep='\t')With several conditions
condition_or = (site.visitor >= 10) | (site.id > 2)
site.show.filter(condition_or, site.id)
condition_and = (site.visitor >= 10) & (site.id > 2)
site.show.filter(condition_and, site.id)visitor_sum = site.show.all(site.visitor.sum, group_by=site.last_check)visitor_count = site.show.all(site.visitor.count, group_by=site.last_check)visitor_max = site.show.first(columns=site.visitor.max).max_visitor
visitor_min = site.show.first(columns=site.visitor.min).min_visitor
visitor_avg = site.show.first(columns=site.visitor.avg).avg_visitorNew model with a foreign key link to site model
from notaorm.datatype import Int, Varchar, ForeignKey
from notaorm.table import Table
webmaster = Table('webmaster', rows=(
Int('id', primary_key=True, not_null=True),
Varchar('email'),
ForeignKey('site', reference=site),
))
webmaster.create()first_webmaster = webmaster.show.first()
print(first_webmaster.site.pk)
linked_site = first_webmaster.site.first()
print(linked_site.id, linked_site.url, linked_site.visitor, sep='\t')It is better to use the pk field rather than the name of the primary key field because access to the pk field does not require the execution of a new sql request.
site.change.insert(url='google.com')site.change.update(site.url.start_with('bing'), url='google.com')site.change.delete(site.visitor == 0, commit=True)By default in the delete method, commit is set to false
notaorm is MIT licensed.