តាមធម្មតា បណ្តាទិន្នន័យទាំងឡាយ ដែលយើងបញ្ចូលទៅក្នុងមូលដ្ឋានទិន្នន័យ គ្មានលំដាប់លំដោយច្បាស់លាស់នោះទេ គឺទីតាំងរបស់វា អាស្រ័យទៅតាមកាលបរិច្ឆេទនៃការបញ្ចូលទិន្នន័យ។ ក៏ប៉ុន្តែ មូលដ្ឋានទិន្នន័យ SQL ផ្តល់លទ្ធភាពអោយយើងអាចតំរៀបទិន្នន័យទាំងនោះទៅតាមលំដាប់ដំដោយពីតូចទៅធំ ឬពីធំទៅតូច ទៅតាមបំណងប្រាថ្នារបស់យើងបានគ្រប់ពេលវេលា។ ពិនិត្យកម្មវិធីខាងក្រោមនេះ៖
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 | <!--\views\index.tpl--> %include("./partials/header.tpl") < style > </ style > < div class = "main" id = "main" > < div class = "content" id = "content" > < div class = "top-widget" > < span >BICYCLES</ span >< input onclick = "location.href='/bikeform'" type = "button" value = "Add Bicycle" > </ div > < div class = "bottom-widget" > < span > < select id = "bikekey" > < option value = "Brand" >Brand</ option > < option value = "Country" >Country</ option > < option value = "Year" >Year</ option > < option value = "Amount" >Amount</ option > < option value = "Price" >Price</ option > </ select > < input onclick = "bicycle.sortBicycle()" type = "button" value = "Sort" > </ span > < span class = "search" > < input type = "text" >< input type = "button" value = "Search" > </ span > </ div > <!--bottom-widget--> < div id = "table" ></ div > < script >bicycle.showBicycle({{!data['bicycles']}}, {{!data['sortIndex']}})</ script > </ div > <!--content--> %include("./partials/sidebar.tpl") </ div > <!--main--> %include("./partials/footer") |
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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | #\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' ) conn.execute( "VACUUM" ) 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 * 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 * 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 * from BICYCLE ORDER BY " + brand) bicycles = cursor.fetchall() conn.commit() conn.close() return bicycles |
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 | #\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 ( "/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) |
GitHub: https://github.com/Sokhavuth/Rental-Bicycle-App
Heroku: https://khmerweb-rba.herokuapp.com/