Skip to content
/ goo Public

Python (3) sqlalchemy wrapper for database interaction

Notifications You must be signed in to change notification settings

wayt/goo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

goo

goo is a database wrapper to ease up interaction with your database objects. It uses sqlalchemy an support the same database types

Installation

pip install goo

Usage

Database connection is initiated when you import the package import goo. It will lock for a connection string (http://docs.sqlalchemy.org/en/latest/core/engines.html#database-urls) in the environment variable GOO_URL or for a .goo file in your current directory. You can also specify a custom goo file using the environment variable GOO_FILE. The environment variable GOO_ECHO allow you to enable sqlalchemy debug echo mode.

Object definition

Object are defined by inheriting goo.Base class, it then uses the same syntax as sqlalchemy.

from goo import Base, utcnow
from sqlalchemy import Column, String, Integer, DateTime

class User(Base):
    __tablename__ = 'user'

    name = Column(String(255), nullable=False, index=True)
    created_at = Column(DateTime, nullable=False, default=utcnow)
    age = Column(Integer, nullable=True, default='1')

Database migration

You can run your sqlalchemy create_all using goo

# import all your objects definitions
from user import User
from goo import create_all

# Create your tables
create_all()

# Drop your tables
drop_all()

Create an object

Considering you have your User class and done the create_all()

from user import User

# create the object
my_user = User.create(name='John', age=42)

# commit it
my_user.commit()

Get an object

Considering you have your User class, done the create_all() and created your first object

from user import User

# By id
my_user = User.get(id='C88B8570-53BA-4051-B198-F47981D2D299')
if my_user is None:
    raise Exception('Could not retrieve User')

# With filter
my_user = User.get(filter=[User.name='John'])
if my_user is None:
    raise Exception('Could not retrieve User')

# With filter_by
my_user = User.get(filter_by={'name': 'John'})
if my_user is None:
    raise Exception('Could not retrieve User')

List objects

Considering you have your User class, done the create_all() and created several objects

from user import User

# retrieve all users
user_list = User.list()
if not user_list:
    raise Exception('No User in database')

# With filter
user_list = User.list(filter=[User.age.in_(42, 18, 36)])
if not user_list:
    raise Exception('No Users found')

# With filter_by
user_list = User.list(filter_by={'age': 42})
if not user_list:
    raise Exception('No Users found')

Update an object

Considering you have your User class, done the create_all() and created an object

from user import User

# By id
my_user = User.get(id='C88B8570-53BA-4051-B198-F47981D2D299')
if my_user is None:
    raise Exception('Could not retrieve User')

my_user.update(age=57)
my_user.commit()

Delete an object

Considering you have your User class, done the create_all() and created an object

from user import User

# By id
my_user = User.get(id='C88B8570-53BA-4051-B198-F47981D2D299')
if my_user is None:
    raise Exception('Could not retrieve User')

user_dict = my_user.delete()
print('User was %s' % user_dict['name'])

Development

(Commands are executed in project root)

I recommend using python 3.6, using pyenv (https://github.com/pyenv/pyenv):

$ make pyenv

Setup your virtualenv

$ make venv
$ source venv/bin/activate

Install requirements

$ make requirements

Setup your configuration, see

$ vim .goo
$ export GOO_ECHO=1

Run pep8

make pep8

Run tests

$ make tests

About

Python (3) sqlalchemy wrapper for database interaction

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published