/
basic.py
executable file
·63 lines (50 loc) · 1.78 KB
/
basic.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/python
import bottle
from bottle import route, redirect, put, delete
from bottle.ext.sqlalchemy import SQLAlchemyPlugin
from sqlalchemy import create_engine, Column, Integer, Sequence, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
engine = create_engine('sqlite:///:memory:', echo=True)
class User(Base):
__tablename__ = 'users'
id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
name = Column(String(50))
fullname = Column(String(50))
password = Column(String(12))
def __init__(self, name, fullname, password):
self.name = name
self.fullname = fullname
self.password = password
def __repr__(self):
return "<User('%s','%s', '%s')>" % (self.name, self.fullname, self.password)
@route('/')
def listing(db):
users = db.query(User)
result = "".join(["<li>%s</li>" % user.name for user in users])
return "<ul>%s</ul>" % result
@put('/:name')
def put_name(name, db):
user = User(name, fullname=name, password=name)
db.add(user)
# imports to delete_name function
from sqlalchemy.orm import sessionmaker
from sqlalchemy.exc import SQLAlchemyError
create_session = sessionmaker(bind=engine)
@delete('/:name')
def delete_name(name):
''' This function don't use the plugin. '''
session = create_session()
try:
user = session.query(User).filter_by(name=name).first()
session.delete(user)
session.commit()
except SQLAlchemyError, e:
session.rollback()
raise bottle.HTTPError(500, "Database Error", e)
finally:
session.close()
bottle.install(SQLAlchemyPlugin(engine, Base.metadata, create=True, create_session = create_session))
if __name__ == '__main__':
bottle.debug(True)
bottle.run(reloader=True)