Code Monkey home page Code Monkey logo

py-sqlalchemy_seed's Introduction

sqlalchemy_seed

image

Python 3

Updates

sqlalchemy_seed is a seed library which provides initial data to database using SQLAlchemy.

sqlalchemy_seed is similar to Django fixtures.

Installation

pip install sqlalchemy_seed

Adding seed

/myapp
  __init__.py
  models.py
  /fixtures
    accounts.yaml

Model file.

# -*- coding: utf-8 -*-

from sqlalchemy import create_engine
from sqlalchemy.exc import OperationalError
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import scoped_session, sessionmaker, relationship
engine = create_engine('sqlite://', convert_unicode=True)

Base = declarative_base()
Base.metadata.bind = engine
Session = sessionmaker(autocommit=False, autoflush=False, bind=engine)
session = scoped_session(Session)

class Account(Base):
    __tablename__ = 'accounts'

    id = Column(Integer, primary_key=True)
    first_name = Column(String(100), nullable=False)
    last_name = Column(String(100), nullable=False)
    age = Column(Integer(), nullable=True)

Seed code.

# -*- coding: utf-8 -*-

from sqlalchemy_seed import (
    create_table,
    drop_table,
    load_fixtures,
    load_fixture_files,
)
from myapp.models import Base, session


def main():
    path = '/path/to/fixtures'
    fixtures = load_fixture_files(path, ['accounts.yaml'])
    load_fixtures(session, fixtures)


if __name__ == '__main__':
    main()

Seed file.

- model: myapp.models.Account
  id: 1
  fields:
    first_name: John
    last_name: Lennon
    age: 20

- model: myapp.models.Account
  id: 2
  fields:
    first_name: Paul
    last_name: McCartney
    age: 21

Update seed

If you want idempotent, you can describe seed like followings.

Seed file.

- model: myapp.models.Account
  fields:
    id: 1
    first_name: John
    last_name: Lennon
    age: 20

- model: myapp.models.Account
  fields:
    id: 2
    first_name: Paul
    last_name: McCartney
    age: 21

LICENSE

NEW BSD LICENSE.

py-sqlalchemy_seed's People

Contributors

crcornwell avatar heavenshell avatar pyup-bot avatar rileyjohngibbs avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

py-sqlalchemy_seed's Issues

Id Value Not Used

In the example fixture data, the format is:

- model: some.model.Name
   id: 1
   fields:
     foo: bar

However, it appears the the id field is never actually referenced in the code. I addressed this by moving my id field into the fields list, but I wonder if you'd prefer to deal with this in a different way?

I only mention it because I was going to add a test case for the "upsert" PR that I just introduced, but it wouldn't quite work with the existing test data since the primary keys were not being taken from the fixtures, but are instead being generated automatically on each insert.

Seeding relationships

Is it possible to seed relationships as well?

What I would like to do is this:

- model: api.models.Business
  fields:
    name: Test Corp
    type: Limited
    addresses:
    - model: api.models.Address
      fields:
        street1: Test street 1
        street2: Test street 2
        city: London
        state: Greater London
        country: GB

Trying this currently leads to an Error:

TypeError: unhashable type: 'dict'

Support for json fixture?

Does it support a json file as fixture? Because in django to load a fixture you can do the following command.

python manage.py loaddata fixtures.json

Adding Table object support

Hi,

I'm using your library to help seed some data into our local environments. We have some fairly complex data structures going on, with a lot of M2M relations.

The relationships are Table objects, rather than models and so don't work with the model creation. The creation of the relation tables themselves isn't an issue (that's already taken care of my sqlalchemy create_all), but rather the insertion of seed data to create the relations.

We have a simple work around, which shouldn't clutter things up much. Would you be interested in me submitting a PR with a proposed feature for allowing Table inserts?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.