Marguerite provides a declarative, consistent accessor to data layer.
Project description
Marguerite
Marguerite provides a declarative, consistent accessor to data layer.
Dependencies
Python 2.7 or later
Werkzeug 0.12.7 or later
Installation
$ pip install Marguerite
Usage
Example
Install requests as an example.
$ pip install requests
define data layer accessor, and writen access structure ```python from marguerite import AbstractStructure, AbstractAccessor, Order from marguerite.accessors import bind
class Accessor(AbstractAccessor): def prepare(self, name, value): order = self.structure.get_order(name) return bind(order, value)
def create(self, name, value): order = self.prepare(name, value) return requests.post(order).json() def get(self, name, value={}): order = self.prepare(name, value) return requests.get(order).json()
class UserStructure(AbstractStructure): accessor = Accessor
orders = Order( user = "https://example.com/users/:id", create = "https://example.com/users/:id?=username=:username" )
```
get data layer accessor object ```python from marguerite import Marguerite
marguerite = Marguerite() accessor = marguerite.get_accessor(“path.to.UserStructure”) ```
fetch data ```python # execute get logic result = accessor.get(“user”, { “id”: 1 }) print(result) # {“id”: 1, “username”: “john”…}
execute post logic
result = accessor.create(“create”, { “id”: 2, “username”: “marguerite” }) print(result) # {“status”: “success”, {“result”: {“id”: 2, “username”: “marguerite”…}}} ```
SQLAlchemy
$ pip install SQLAlchemy MySQL-python
create database
mysql> create database marguerite; Query OK, 1 row affected (0.00 sec)
define database structure ```python from marguerite import Order from marguerite.accessors.sql import SQLAlchemyAccessor from marguerite.structures.sql import SQLAlchemyStructure
class User(SQLAlchemyStructure): struct = { “id”: int(), “name”: str(), “email”: str(), }
orders = Order( create_table = """ CREATE TABLE IF NOT EXISTS __table__( id int(11) unsigned NOT NULL AUTO_INCREMENT, name varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (id) ) ENGINE=InnoDB CHARSET=utf8; """, drop_table = """ DROP TABLE IF EXISTS __table__ """, insert = """ INSERT INTO __table__(name) VALUES (:name) """, select = """ SELECT * FROM __table__ WHERE id = :id """, find = """ SELECT * FROM __table__ WHERE id in (:id1, :id2) """ )
```
get database accessor object ```python from marguerite import Marguerite
engine = create_engine(“mysql+mysqldb://root:@localhost:3309/marguerite”)
marguerite = Marguerite(engine) accessor = marguerite.get_accessor(“path.to.User”) ```
create table
accessor.execute("create_table")
check also
mysql> use marguerite Database changed mysql> show tables; +----------------------+ | Tables_in_marguerite | +----------------------+ | user | +----------------------+
fetch data ```python # insert record at user table accessor.execute(“insert”, {“name”: “john”})
get record
row = accessor.get(“select”, { “id”: 1 }) print(row) # {“id”: 1, “name”: “john”, “email”: “”}
find records
rows = accessor.find(“find”, { “id1”: 1, “id2”: 2 }) print(rows) # [{“id”: 1, “name”: “john”, “email”: “”}] ```
LICENSE
Apache License 2.0
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.