នៅពេលដែលទិន្នន័យត្រូវបានបញ្ចូលកាន់តែច្រើនឡើងៗ ទៅក្នុងមូលដ្ឋានទិន្នន័យ ដើម្បីស្រង់យកទិន្នន័យណាមួយ យើងចាំបាច់ត្រូវតែស្វែងរកទិន្នន័យនោះ ដោយវិធី «Search» ។ អាស្រ័យហេតុ គ្រប់កម្មវិធីមូលដ្ឋានទិន្នន័យទាំងឡាយ ចាំបាច់ត្រូវបំពាក់ដោយមុខងារ search មួយជាដរាប។ ដោយឡែក ចំពោះកម្មវិធី Rental Bicycle App យើងអាចបំពាក់មុខងារ Search អោយវា ដោយធ្វើដូចខាងក្រោមនេះ៖
#\controllers\bikeform.py
import config, re, json
from bottle import template, route, request, redirect
from models import bicycledb
@route("/bikeform")
def renderForm():
if 'rowedit' in config.kargs:
del config.kargs['rowedit']
return template('bikeform', data=config.kargs)
@route("/bikeform/edit/<id>")
def editForm(id):
config.kargs['rowedit'] = bicycledb.edit(id)
config.kargs['id'] = id
return template('bikeform', data=config.kargs)
@route("/bikeform/delete/<id>")
def deleteForm(id):
config.kargs['id'] = id
bicycledb.delete(id)
redirect('/')
@route("/bicycle/<brand>/<sortIndex>")
def sortBicycle(brand,sortIndex):
config.kargs['bicycles'] = json.dumps(bicycledb.sort(brand))
config.kargs['sortIndex'] = sortIndex
return template('index', data=config.kargs)
@route("/search/bicycle/<query>")
def searchBicycle(query):
config.kargs['bicycles'] = json.dumps(bicycledb.search(query))
return template('index', data=config.kargs)
@route("/bikeform", method="POST")
def getFormData():
brand = request.forms.get("fbrand")
country = request.forms.get("fcountry")
year = request.forms.get("fyear")
amount = request.forms.get("famount")
price = request.forms.get("fprice")
if not re.findall("[a-zA-Z]", country):
config.kargs['message'] = "Country name could contain only letter."
return template('bikeform', data=config.kargs)
elif not (re.findall("[0-9]", year) and re.findall("[0-9]", amount)):
config.kargs['message'] = "Year and amount must be whole number."
return template('bikeform', data=config.kargs)
elif not (re.findall(r"[-+]?\d*\.\d+|\d+", price)):
config.kargs['message'] = "Price must be a number."
return template('bikeform', data=config.kargs)
else:
if 'rowedit' in config.kargs:
bicycledb.update(brand, country, int(year), int(amount), float(price), config.kargs['id'])
del config.kargs['rowedit']
redirect('/')
else:
bicycledb.insert(brand, country, int(year), int(amount), float(price))
return template('bikeform', data=config.kargs)
#\models\bicycledb.py
import sqlite3
def insert(*bicycle):
conn = sqlite3.connect('sqlite.db')
cursor = conn.cursor()
sql ='''CREATE TABLE IF NOT EXISTS BICYCLE(
BRAND TEXT,
COUNTRY TEXT,
YEAR INT,
AMOUNT INT,
PRICE FLOAT
)
'''
cursor.execute(sql)
cursor.execute("INSERT INTO BICYCLE VALUES (?, ?, ?, ?, ?)", bicycle)
conn.commit()
conn.close()
def select():
conn = sqlite3.connect('sqlite.db')
cursor = conn.cursor()
sql ='''CREATE TABLE IF NOT EXISTS BICYCLE(
BRAND TEXT,
COUNTRY TEXT,
YEAR INT,
AMOUNT INT,
PRICE FLOAT
)
'''
cursor.execute(sql)
cursor.execute("SELECT ROWID, * from BICYCLE")
bicycles = cursor.fetchall()
conn.commit()
conn.close()
return bicycles
def edit(id):
conn = sqlite3.connect('sqlite.db')
cursor = conn.cursor()
cursor.execute("SELECT ROWID, * from BICYCLE WHERE ROWID = " + str(id))
bicycle = cursor.fetchone()
conn.commit()
conn.close()
return bicycle
def update(*args):
conn = sqlite3.connect('sqlite.db')
cursor = conn.cursor()
sql = "UPDATE BICYCLE SET BRAND=?, COUNTRY=?, YEAR=?, AMOUNT=?, PRICE=? WHERE ROWID=?"
cursor.execute(sql, args)
conn.commit()
conn.close()
def delete(id):
conn = sqlite3.connect('sqlite.db')
cursor = conn.cursor()
cursor.execute("DELETE FROM BICYCLE WHERE ROWID=?", (id,))
conn.commit()
conn.close()
def sort(brand):
conn = sqlite3.connect('sqlite.db')
cursor = conn.cursor()
cursor.execute("SELECT ROWID, * from BICYCLE ORDER BY " + brand)
bicycles = cursor.fetchall()
conn.commit()
conn.close()
return bicycles
def search(query):
conn = sqlite3.connect('sqlite.db')
cursor = conn.cursor()
sql = "SELECT ROWID, * from BICYCLE WHERE BRAND LIKE '%"+query+"%'"
sql += " OR COUNTRY LIKE '%"+query+"%'"
sql += " OR YEAR LIKE '%"+query+"%'"
sql += " OR AMOUNT LIKE '%"+query+"%'"
sql += " OR PRICE LIKE '%"+query+"%'"
cursor.execute(sql)
bicycles = cursor.fetchall()
conn.commit()
conn.close()
return bicycles
GitHub: https://github.com/Sokhavuth/Rental-Bicycle-App
Heroku: https://khmerweb-rba.herokuapp.com/














