· 8 years ago · Jan 18, 2018, 03:00 PM
1import os
2
3from flask import Flask
4from flask_sqlalchemy import SQLAlchemy
5from flask_migrate import Migrate
6
7
8basedir = os.path.abspath(os.path.dirname(__file__))
9
10
11class Config:
12 SECRET_KEY = os.environ.get('SECRET_KEY') or 'a-key'
13 SQLALCHEMY_DATABASE_URI = (
14 os.environ.get('DATABASE_URI')
15 or 'sqlite:///' + os.path.join(basedir, 'app.db'))
16 SQLALCHEMY_TRACK_MODIFICATIONS = False
17
18
19app = Flask(__name__)
20app.config.from_object(Config)
21
22db = SQLAlchemy(app)
23migrate = Migrate(app, db)
24
25
26class User(db.Model):
27
28 id = db.Column(db.Integer, primary_key=True)
29
30 name = db.Column(db.String(64), index=True, unique=True)
31
32 # Games created by the user:
33 created_games = db.relationship(
34 'Game', backref='author', lazy='dynamic',
35 foreign_keys='game.user_id')
36
37 # Games as opponent:
38 invitations = db.relationship(
39 'Game', backref='guest', lazy='dynamic',
40 foreign_keys='game.opponent_id')
41
42
43class Game(db.Model):
44
45 id = db.Column(db.Integer, primary_key=True)
46
47 # "Creator" user:
48 user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
49
50 # "Opponent" user:
51 opponent_id = db.Column(db.Integer, db.ForeignKey('user.id'))
52
53(venv) $ export FLASK_APP=app.py
54(venv) $ flask db init
55...
56(venv) $ flask db migrate
57...
58(venv) $ flask db upgrade
59...
60
61(venv) $ python
62Python 3.6.0
63...
64>>> from app import User
65>>> u = User(name="Alice")
66Traceback (most recent call last):
67...
68AttributeError: 'Table' object has no attribute 'user_id'