Skip to content

Instantly share code, notes, and snippets.

@cocoatomo
Created April 5, 2012 12:01
Show Gist options
  • Save cocoatomo/2310374 to your computer and use it in GitHub Desktop.
Save cocoatomo/2310374 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from flask import Flask, render_template, make_response
from model import app, db, WorkTime, Employee, Project
import csv
def create_csv():
with open('/tmp/worktime.csv', 'w') as f:
rows = db.session.query(WorkTime, Employee, Project) \
.filter(WorkTime.employee_id==Employee.id) \
.filter(WorkTime.project_id==Project.id).all()
csvwriter = csv.writer(f)
csvwriter.writerows([(w.date, e.name, p.name, w.kind, w.ratio) for w, e, p in rows])
@app.route('/download')
def download():
# create_csv() ここのコメントアウト外すと例外が飛ぶ
return make_response('TO BE IMPLEMENTED')
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.debug = True
app.run()
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from flask import Flask
from flaskext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
# url = 'mysql://worktime:[email protected]/worktime'
url = 'mysql://kinebuchi@localhost/test'
app.config['SQLALCHEMY_DATABASE_URI'] = url
db = SQLAlchemy(app)
class Employee(db.Model):
id = db.Column(db.Integer, primary_key=True)
code = db.Column(db.String(45))
name = db.Column(db.String(45))
worktimes = db.relation('WorkTime', backref='employee')
def __init__(self, code, name):
self.code = code
self.name = name
def __repr(self):
return '<Employee {0}, {1}, {2}>'.format(self.id, self.code, self.name)
class Project(db.Model):
id = db.Column(db.Integer, primary_key=True)
code = db.Column(db.String(20))
name = db.Column(db.String(20))
status = db.Column(db.Enum('PLANNED', 'RUNNING', 'FINISHED'),
default='PLANNED')
worktimes = db.relation('WorkTime', backref='project')
def __init__(self, code, name, status='PLANNED'):
self.code = code
self.name = name
self.status = status
def __repr__(self):
return '<Project {0}, {1}, {2}, {3}>'.format(self.id, self.code,
self.name, self.status)
class WorkTime(db.Model):
date = db.Column(db.Date, primary_key=True)
employee_id = db.Column(db.Integer, db.ForeignKey('employee.id'),
primary_key=True)
project_id = db.Column(db.Integer, db.ForeignKey('project.id'),
primary_key=True)
kind = db.Column(db.Enum('BUDGET', 'ACTUAL'), primary_key=True)
ratio = db.Column(db.Float, default=0)
def __init__(self, date, employee_id, project_id, kind, ratio):
self.date = date
self.employee_id = employee_id
self.project_id = project_id
self.kind = kind
self.ratio = ratio
def __repr__(self):
return '<WorkTime {0}, {1}, {2}, {3}, {4}>'.format(self.date,
self.employee_id,
self.project_id,
self.kind,
self.ratio)
@methane
Copy link

methane commented Apr 5, 2012

git clone して以下の変更を加えたところ、例外は発生しませんでした。
(db.create_all() は手動で行いました)

diff --git a/app.py b/app.py
index 8c6c040..4161bf3 100644
--- a/app.py
+++ b/app.py
@@ -17,7 +17,7 @@ def create_csv():

@app.route('/download')
def download():
-# create_csv() ここのコメントアウト外すと例外が飛ぶ

  • create_csv()
    return make_response('TO BE IMPLEMENTED')

@app.route('/')
diff --git a/model.py b/model.py
index 584039f..5263b7a 100644
--- a/model.py
+++ b/model.py
@@ -6,7 +6,8 @@ from flaskext.sqlalchemy import SQLAlchemy

app = Flask(name)

url = 'mysql://worktime:[email protected]/worktime'

-url = 'mysql://kinebuchi@localhost/test'
+#url = 'mysql://kinebuchi@localhost/test'
+url = 'sqlite:///test.db'
app.config['SQLALCHEMY_DATABASE_URI'] = url
db = SQLAlchemy(app)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment