database
This commit is contained in:
parent
e3bc41b9f5
commit
df88f0f7a0
|
@ -1,6 +1,9 @@
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
|
from flask.ext.sqlalchemy import SQLAlchemy
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
app.config.from_object('config')
|
app.config.from_object('config')
|
||||||
|
db = SQLAlchemy(app)
|
||||||
|
|
||||||
|
from app import views, models
|
||||||
|
|
||||||
from app import views
|
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
from app import db
|
||||||
|
|
||||||
|
ROLE_USER = 0
|
||||||
|
ROLE_ADMIN = 1
|
||||||
|
|
||||||
|
class User(db.Model):
|
||||||
|
id = db.Column(db.Integer, primary_key = True)
|
||||||
|
nickname = db.Column(db.String(64), index = True, unique = True)
|
||||||
|
email = db.Column(db.String(120), index = True, unique = True)
|
||||||
|
role = db.Column(db.SmallInteger, default = ROLE_USER)
|
||||||
|
posts = db.relationship('Post', backref = 'author', lazy = 'dynamic')
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return '<User %r>' % (self.nickname)
|
||||||
|
|
||||||
|
class Post(db.Model):
|
||||||
|
id = db.Column(db.Integer, primary_key = True)
|
||||||
|
body = db.Column(db.String(140))
|
||||||
|
timestamp = db.Column(db.DateTime)
|
||||||
|
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return '<Post %r>' % (self.body)
|
|
@ -1,3 +1,6 @@
|
||||||
|
import os
|
||||||
|
basedir = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
|
||||||
CSRF_ENABLED = True
|
CSRF_ENABLED = True
|
||||||
SECRET_KEY = 'you-will-never-guess'
|
SECRET_KEY = 'you-will-never-guess'
|
||||||
|
|
||||||
|
@ -6,4 +9,7 @@ OPENID_PROVIDERS = [
|
||||||
{ 'name': 'Yahoo', 'url': 'https://me.yahoo.com' },
|
{ 'name': 'Yahoo', 'url': 'https://me.yahoo.com' },
|
||||||
{ 'name': 'AOL', 'url': 'http://openid.aol.com/<username>' },
|
{ 'name': 'AOL', 'url': 'http://openid.aol.com/<username>' },
|
||||||
{ 'name': 'Flickr', 'url': 'http://www.flickr.com/<username>' },
|
{ 'name': 'Flickr', 'url': 'http://www.flickr.com/<username>' },
|
||||||
{ 'name': 'MyOpenID', 'url': 'https://www.myopenid.com' }]
|
{ 'name': 'MyOpenID', 'url': 'https://www.myopenid.com' }]
|
||||||
|
|
||||||
|
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db')
|
||||||
|
SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository')
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!flask/bin/python
|
||||||
|
from migrate.versioning import api
|
||||||
|
from config import SQLALCHEMY_DATABASE_URI
|
||||||
|
from config import SQLALCHEMY_MIGRATE_REPO
|
||||||
|
from app import db
|
||||||
|
import os.path
|
||||||
|
db.create_all()
|
||||||
|
if not os.path.exists(SQLALCHEMY_MIGRATE_REPO):
|
||||||
|
api.create(SQLALCHEMY_MIGRATE_REPO, 'database repository')
|
||||||
|
api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
|
||||||
|
else:
|
||||||
|
api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO, api.version(SQLALCHEMY_MIGRATE_REPO))
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!flask/bin/python
|
||||||
|
from migrate.versioning import api
|
||||||
|
from config import SQLALCHEMY_DATABASE_URI
|
||||||
|
from config import SQLALCHEMY_MIGRATE_REPO
|
||||||
|
v = api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
|
||||||
|
api.downgrade(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO, v - 1)
|
||||||
|
print 'Current database version: ' + str(api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO))
|
|
@ -0,0 +1,15 @@
|
||||||
|
#!flask/bin/python
|
||||||
|
import imp
|
||||||
|
from migrate.versioning import api
|
||||||
|
from app import db
|
||||||
|
from config import SQLALCHEMY_DATABASE_URI
|
||||||
|
from config import SQLALCHEMY_MIGRATE_REPO
|
||||||
|
migration = SQLALCHEMY_MIGRATE_REPO + '/versions/%03d_migration.py' % (api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO) + 1)
|
||||||
|
tmp_module = imp.new_module('old_model')
|
||||||
|
old_model = api.create_model(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
|
||||||
|
exec old_model in tmp_module.__dict__
|
||||||
|
script = api.make_update_script_for_model(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO, tmp_module.meta, db.metadata)
|
||||||
|
open(migration, "wt").write(script)
|
||||||
|
api.upgrade(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
|
||||||
|
print 'New migration saved as ' + migration
|
||||||
|
print 'Current database version: ' + str(api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO))
|
|
@ -0,0 +1,4 @@
|
||||||
|
This is a database migration repository.
|
||||||
|
|
||||||
|
More information at
|
||||||
|
http://code.google.com/p/sqlalchemy-migrate/
|
|
@ -0,0 +1,5 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
from migrate.versioning.shell import main
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
|
@ -0,0 +1,25 @@
|
||||||
|
[db_settings]
|
||||||
|
# Used to identify which repository this database is versioned under.
|
||||||
|
# You can use the name of your project.
|
||||||
|
repository_id=database repository
|
||||||
|
|
||||||
|
# The name of the database table used to track the schema version.
|
||||||
|
# This name shouldn't already be used by your project.
|
||||||
|
# If this is changed once a database is under version control, you'll need to
|
||||||
|
# change the table name in each database too.
|
||||||
|
version_table=migrate_version
|
||||||
|
|
||||||
|
# When committing a change script, Migrate will attempt to generate the
|
||||||
|
# sql for all supported databases; normally, if one of them fails - probably
|
||||||
|
# because you don't have that database installed - it is ignored and the
|
||||||
|
# commit continues, perhaps ending successfully.
|
||||||
|
# Databases in this list MUST compile successfully during a commit, or the
|
||||||
|
# entire commit will fail. List the databases your application will actually
|
||||||
|
# be using to ensure your updates to that database work properly.
|
||||||
|
# This must be a list; example: ['postgres','sqlite']
|
||||||
|
required_dbs=[]
|
||||||
|
|
||||||
|
# When creating new change scripts, Migrate will stamp the new script with
|
||||||
|
# a version number. By default this is latest_version + 1. You can set this
|
||||||
|
# to 'true' to tell Migrate to use the UTC timestamp instead.
|
||||||
|
use_timestamp_numbering=False
|
|
@ -0,0 +1,28 @@
|
||||||
|
from sqlalchemy import *
|
||||||
|
from migrate import *
|
||||||
|
|
||||||
|
|
||||||
|
from migrate.changeset import schema
|
||||||
|
pre_meta = MetaData()
|
||||||
|
post_meta = MetaData()
|
||||||
|
user = Table('user', post_meta,
|
||||||
|
Column('id', Integer, primary_key=True, nullable=False),
|
||||||
|
Column('nickname', String(length=64)),
|
||||||
|
Column('email', String(length=120)),
|
||||||
|
Column('role', SmallInteger, default=ColumnDefault(0)),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade(migrate_engine):
|
||||||
|
# Upgrade operations go here. Don't create your own engine; bind
|
||||||
|
# migrate_engine to your metadata
|
||||||
|
pre_meta.bind = migrate_engine
|
||||||
|
post_meta.bind = migrate_engine
|
||||||
|
post_meta.tables['user'].create()
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade(migrate_engine):
|
||||||
|
# Operations to reverse the above upgrade go here.
|
||||||
|
pre_meta.bind = migrate_engine
|
||||||
|
post_meta.bind = migrate_engine
|
||||||
|
post_meta.tables['user'].drop()
|
|
@ -0,0 +1,28 @@
|
||||||
|
from sqlalchemy import *
|
||||||
|
from migrate import *
|
||||||
|
|
||||||
|
|
||||||
|
from migrate.changeset import schema
|
||||||
|
pre_meta = MetaData()
|
||||||
|
post_meta = MetaData()
|
||||||
|
post = Table('post', post_meta,
|
||||||
|
Column('id', Integer, primary_key=True, nullable=False),
|
||||||
|
Column('body', String(length=140)),
|
||||||
|
Column('timestamp', DateTime),
|
||||||
|
Column('user_id', Integer),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade(migrate_engine):
|
||||||
|
# Upgrade operations go here. Don't create your own engine; bind
|
||||||
|
# migrate_engine to your metadata
|
||||||
|
pre_meta.bind = migrate_engine
|
||||||
|
post_meta.bind = migrate_engine
|
||||||
|
post_meta.tables['post'].create()
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade(migrate_engine):
|
||||||
|
# Operations to reverse the above upgrade go here.
|
||||||
|
pre_meta.bind = migrate_engine
|
||||||
|
post_meta.bind = migrate_engine
|
||||||
|
post_meta.tables['post'].drop()
|
|
@ -0,0 +1,6 @@
|
||||||
|
#!flask/bin/python
|
||||||
|
from migrate.versioning import api
|
||||||
|
from config import SQLALCHEMY_DATABASE_URI
|
||||||
|
from config import SQLALCHEMY_MIGRATE_REPO
|
||||||
|
api.upgrade(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
|
||||||
|
print 'Current database version: ' + str(api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO))
|
Loading…
Reference in New Issue