예제 #1
0
    def readData(self, key_num=0, rev_order=False, itemperpage=9, page=1):
        # 處理 itemperpage 與 page 為 0 或小於 0 的情況, 因為由 URL 取回的變數型別為字串, 因此以字串判別
        if itemperpage == "0" or page == "0" or int(itemperpage) < 0 or int(page) < 0 :
            itemperpage = 9
            page = 1
        #
        個人資料 = []
        資料計數 = 0

        # 以下改為以 pybean 儲存資料
        library = Store(SQLiteWriter(SQLite_data_dir+"/database.sqlite", frozen=False))
        # 動態建立 student 資料表
        student = library.new("student")
        # 列出目前的資料庫內容
        if (library.count("student") == 0):
            outString = "沒有資料, 請先輸入資料!<br />"
            outString += self.menuLink()
            return outString
        else:
            # 這裡在查找所有資料"1 order by id limit $starti,$item_per_page"
            # 利用 page 與 itemperpage 計算 startnum 與 endnum
            #
            # 由資料庫中的 student 資料表計算資料筆數
            totalitem = library.count("student")
            totalpage = math.ceil(totalitem/int(itemperpage))
            # 若索引從 1 開始
            #starti = int(itemperpage) * (int(page) - 1) + 1
            # 若索引從 0 開始
            starti = int(itemperpage) * (int(page) - 1)
            endi = starti + int(itemperpage) - 1
            # 必須要送到 Mako 的變數值 totalitem, page, itemperpage
            # 這裡要考量送回全部資料, 或者只送出特定頁面的所屬資料數列

            #for 資料 in library.find("student","1"):
            for 資料 in library.find("student","1 order by stud_number limit "+str(starti)+", "+str(itemperpage)):
            #for 資料 in library.find("student","1 order by stud_number limit 0, 5"):
            #for 資料 in library.find("student","1 order by stud_number limit 1,10"):
                學號 = 資料.stud_number
                姓名 = 資料.stud_name
                科系 = 資料.school_dept
                專長 = 資料.major
                薪水 = 資料.expt_salary
                #更新連結 = "<a href=\"updateForm?stud_number="+學號+"\">"+學號+"</a>"
                # 配合 pybean 0.2.1 將 uuid 改為 id
                更新連結 = "<a href=\"updateForm?id="+str(資料.id)+"\">"+學號+"</a>"
                更新 = "<a href=\"updateForm?id="+str(資料.id)+"\">更新</a>"
                刪除 = "<a href=\"deleteForm?id="+str(資料.id)+"\">刪除</a>"
                個人資料.append([更新連結,姓名,科系,專長,薪水,更新,刪除])
        #
        # 根據數列中各 tuple 中的學號(亦即 key data[0])進行排序
        # 個人資料排列後, 必須加以指定成變數, 否則個人資料的內容排序後並未改變
        #個人資料 = sorted(個人資料, key=lambda data: data[0], reverse=True)
        個人資料 = sorted(個人資料, key=lambda data: data[int(key_num)], reverse=int(rev_order))
        #print(個人資料)
        #outString = self.htmlList(個人資料)
        outString = self.pageList(個人資料,totalitem,itemperpage,page)
        return outString
예제 #2
0
def showPage(page):
    itemperpage = 16
    db = Store(SQLiteWriter("taobao.db", frozen=True))
    rs = []
    items = db.find("freetry", "1 order by date desc,gailv  limit %s,%s" %
                    ((page - 1) * itemperpage, itemperpage))
    for item in items:
        item.uuid = item.itemId
        rs.append(dict(item.__dict__))

    return json.dumps(rs)
예제 #3
0
def showPage(page):
    itemperpage = 16
    db = Store(SQLiteWriter("taobao.db", frozen=True))
    rs = []
    items = db.find(
        "freetry", "1 order by date desc,gailv  limit %s,%s" %
        ((page - 1) * itemperpage, itemperpage))
    for item in items:
        item.uuid = item.itemId
        rs.append(dict(item.__dict__))

    return json.dumps(rs)
예제 #4
0
 def doCheck(self, word=None):
     if word == None:
         return "<br /><a href=\"/\">首頁</a>|<a href=\"./\">重新查詢</a>"
     #vocabulary = Store(SQLiteWriter(os.environ['OPENSHIFT_REPO_DIR']+"/wsgi/webster_vocabulary.sqlite", frozen=True))
     vocabulary = Store(SQLiteWriter(data_dir+"/webster_vocabulary.sqlite", frozen=True))
     if (vocabulary.count("word","lower(word) like ?", [word]) == 0):
         return "找不到與 "+ word.title() + "有關的資料!"
     else:
         result = vocabulary.find("word","lower(word) like ?", [word])
         output = "以下為 webster 字典查詢:"+word+" 所得到的結果<br /><br />"
         for item in result:
             output += word.title()+"<br /><br />"+str(self.nl2br(item.defn,True))+"<br />"
         output += "<br /><a href=\"/\">首頁</a>|<a href=\"./\">重新查詢</a>"
         return output
예제 #5
0
    def doUpdate(self, id=None, stud_number=None, stud_name=None, \
                    school_dept=None, major=None, expt_salary=None, itemperpage=9, page=1):
        個人資料 = []
        資料計數 = 0
        # 以下改為以 pybean 儲存資料
        library = Store(SQLiteWriter(SQLite_data_dir+"/database.sqlite", frozen=False))
        # 動態建立 student 資料表
        student = library.new("student")

        # 以 find_one 找出所要更新的一筆資料
        # 配合 pybean 0.2.1 將 uuid 改為 id, 且將 UUID(uuid).bytes 改為 id
        更新資料 = library.find_one("student","id=?",[id])
        # 是否會發生更新資料為空的情況?
        if 更新資料 == None:
            outString = "沒有資料"
            return outString
        # 將更新資料存入 pybean
        更新資料.stud_number = stud_number
        更新資料.stud_name = stud_name
        更新資料.school_dept = school_dept
        更新資料.major = major
        更新資料.expt_salary = expt_salary
        # 儲存資料表內容
        library.save(更新資料)
        # 配合 pybean 0.2.1 將 commit 移出, save 與 delete 必須要配合 commit 才能更新資料庫
        library.commit()
        # 設法從資料庫中擷取所有資料, 以得到個人資料數列
        for 資料 in library.find("student","1"):
            學號 = 資料.stud_number
            姓名 = 資料.stud_name
            科系 = 資料.school_dept
            專長 = 資料.major
            薪水 = 資料.expt_salary
            # 配合 pybean 0.2.1 將 uuid 改為 id, 且將 UUID(uuid).bytes 改為 id
            更新連結 = "<a href=\"updateForm?id="+str(資料.id)+"\">"+學號+"</a>"
            # 增加更新與刪除連結
            #個人資料.append([更新連結,姓名,科系,專長,薪水])
            更新 = "<a href=\"updateForm?id="+str(資料.id)+"\">更新</a>"
            刪除 = "<a href=\"deleteForm?id="+str(資料.id)+"\">刪除</a>"
            個人資料.append([更新連結,姓名,科系,專長,薪水,更新,刪除])
        #
        # 根據數列中各 tuple 中的學號(亦即 key data[0])進行排序
        # 個人資料排列後, 必須加以指定成變數, 否則個人資料的內容排序後並未改變
        個人資料 = sorted(個人資料, key=lambda data: data[0], reverse=True)
        #print(個人資料)
        # 改用 HTML 進行資料列印
        #outString = self.htmlList(個人資料)
        totalitem = library.count("student")
        outString = self.pageList(個人資料,totalitem,itemperpage,page)
        return outString
예제 #6
0
def doCheck():
    word = request.form["word"]
    if word == None:
        return "<br /><a href=\"/\">首頁</a>|<a href=\"./\">重新查詢</a>"
    vocabulary = Store(
        SQLiteWriter(data_dir + "/webster_vocabulary.sqlite", frozen=True))
    if (vocabulary.count("word", "lower(word) like ?", [word]) == 0):
        return "找不到與 " + word.title() + "有關的資料!"
    else:
        result = vocabulary.find("word", "lower(word) like ?", [word])
        output = "以下為 webster 字典查詢:" + word + " 所得到的結果<br /><br />"
        for item in result:
            output += word.title() + "<br /><br />" + str(
                nl2br(item.defn, True)) + "<br />"
        output += "<br /><a href=\"/\">首頁</a>|<a href=\"./\">重新查詢</a>"
        return output
예제 #7
0
from pybean import Store, SQLiteWriter

library = Store(SQLiteWriter(":memory:", frozen=False))

book = library.new("book")
book.title = "Boost development with pybean"
book.author = "Charles Xavier"
library.save(book)

for book in library.find("book", "author like ?", ["Charles Xavier"]):
    print book.title

library.delete(book)
library.commit()
예제 #8
0
 def gentable2(self):
     library = Store(SQLiteWriter(SQLite_data_dir+"/student.sqlite", frozen=False))
     grouping = library.new("st908306")
     # 建立一個空數列
     st_array = list()
     mako_array = list()
     # 資料庫查詢 1 表示全部資料, row 欄位正向排序, col 則逆向排序
     for 資料 in library.find("st908306","1 order by row,col DESC"):
         #print(資料.stud_number,資料.stud_name,資料.row,資料.col)
         mako_array.append("<a href=>"+資料.stud_number+"<br />"+資料.stud_name+"</a>")
     #print(mako_array)
     #套稿查詢 = TemplateLookup(directories=['./templates'], output_encoding='utf-8', encoding_errors='replace')
     # templates 為絕對目錄
     套稿查詢 = TemplateLookup(directories=[template_root_dir+"/templates"])
     # 必須要從 templates 目錄取出 index.html
     座位套稿 = 套稿查詢.get_template("gentable.html")
     #座位套稿 = Template(filename='templates/index.html', format_exceptions=True, lookup=套稿查詢)
     #return 座位套稿.render(currentTime=datetime.datetime.now())
     return 座位套稿.render(st_array=mako_array)
     # #############################################
     # 以上使用 Mako 套稿處理頁面, 以下程式段應該不再需要
     # #############################################
     # 建立一個空字典
     st_dict = {}
     組別 = 0
     有資料 = 0
     # 開始準備列印網際表單
     fileout = open("400232_out_w13.html","w",encoding='utf-8')
     # 列出目前的資料庫中 st908306 資料表的內容
     if (library.count("st908306") == 0):
         outString = "沒有資料, 請先輸入資料!<br />"
         outString += self.menuLink()
         return outString
     else:
         total = library.count("st908306")
     超文件標頭 = '''
         <html>
         <head>
         <meta http-equiv="content-type" content="text/html;charset=utf-8">
         <title>分組座位表</title>
         </head>
         <body>
         '''
     fileout.write(超文件標頭)
     # 除了寫檔外, 利用 outString 來收集超文件字串, 最後再以 return 傳回
     outString = 超文件標頭
     fileout.write("<center>黑板<br /><br /><table border=1>")
     outString += "<center>黑板<br /><br /><table border=1>"
     #_23_56_89_11,12
     # 因為最多 12 組, 增加的組連結行數共有 3 行
     組加行 = 3
     # 每一列可容納的組數為 3
     每列組數 = 3
     組累計 = 0
     列累計 = 0
     目前組別 = 0
     for 列 in range(1,10+組加行):
         # 希望在第 1, 4 ,7 列加上組別連結
         if 列 in [1, 4, 7, 10]:
             組累計 += 1
             fileout.write("<tr>")
             outString += "<tr>"
             for 行 in range(9,0,-1):
                 # 組別連結將會放在第 2, 5, 8  行的位置, 且各橫跨 3 行
                 if 行 in [2, 5, 8] :
                     列累計 += 1
                     #目前組別 = 列+每列組數*組累計-列累計
                     fileout.write("<td colspan=\"3\" align=\"center\">第"+str(列+每列組數*組累計-列累計)+"組</td>")
                     outString += "<td colspan=\"3\" align=\"center\">第"+str(列+每列組數*組累計-列累計)+"組</td>"
             fileout.write("</tr>")
             outString += "</tr>"
         else:
             # 將組累計數從增加的列數中扣除, 得到在未加上組連結列之前的列序號, 
             列 -= 組累計
             fileout.write("<tr>")
             outString += "<tr>"
             for 行 in range(9,0,-1):
                 # 設法逐一掃過所有資料, 以便找出符合列印行數與列數的資料
                 for 資料 in library.find("st908306","1"):
                     if(資料.col == 行 and 資料.row == 列):
                         fileout.write("<td>"+str(資料.stud_number)+str(資料.stud_name)+"</td>")
                         outString += "<td><a href=index?stud_number="+str(資料.stud_number)+\
                                             "&stud_name="+str(資料.stud_name)+">"+str(資料.stud_number)+\
                                             str(資料.stud_name)+"</a></td>"
                         有資料 = 1
                 if(有資料 == 0):
                     fileout.write("<td>&nbsp;</td>")
                     outString += "<td>&nbsp;</td>"
                 else:
                     有資料 = 0
             fileout.write("</tr>")
             outString += "</tr>"
     fileout.write("</table></center>")
     outString += "</table></center>"
     超文件收尾 = '''
         </body>
         </html>
         '''
     fileout.write(超文件收尾)
     outString += 超文件收尾
     # 最後記得附加連結表單
     outString += self.menuLink()
     # 改為資料庫存取後, 沒有 filein
     #filein.close()
     fileout.close()
     # 將已經拼湊好的 outString 傳回瀏覽器
     return outString
예제 #9
0
 def gentable(self):
     '''
     2013.01.20 改為 pybean 資料庫存取
     本程式的目的在讀取 401231_out2.txt 學生分組名單, 依據各學員學號姓名以及座號, 建立所需的資料連結表格, 並透過連結允許使用者附加資料.
     '''
     library = Store(SQLiteWriter(SQLite_data_dir+"/student.sqlite", frozen=False))
     grouping = library.new("st908306")
     # 建立一個空數列
     st_array = list()
     # 建立一個空字典
     st_dict = {}
     組別 = 0
     #===============================================================
     #  接著進入程式的第二階段
     #===============================================================
     # 接下來進行上述 st_array 的應用
     # 用來判定表格是否有資料的變數
     有資料 = 0
     # 開始準備列印網際表單
     fileout = open("400232_out_w13.html","w",encoding='utf-8')
     # 列出目前的資料庫中 st908306 資料表的內容
     if (library.count("st908306") == 0):
         outString = "沒有資料, 請先輸入資料!<br />"
         outString += self.menuLink()
         return outString
     else:
         total = library.count("st908306")
     # 這裡有兩種選擇, 從資料庫中弄出與先前相同的 st_array 或者直接由資料庫中查出所要的資料
     # 改為從資料庫中的資料表計算總學員數
     #total = len(st_array)
     # 建立 table 表格
     # 加入超文件標頭
     超文件標頭 = '''
         <html>
         <head>
         <meta http-equiv="content-type" content="text/html;charset=utf-8">
         <title>分組座位表</title>
         </head>
         <body>
         '''
     fileout.write(超文件標頭)
     # 除了寫檔外, 利用 outString 來收集超文件字串, 最後再以 return 傳回
     outString = 超文件標頭
     fileout.write("<center>黑板<br /><br /><table border=1>")
     outString += "<center>黑板<br /><br /><table border=1>"
     #_23_56_89_11,12
     # 因為最多 12 組, 增加的組連結行數共有 3 行
     組加行 = 3
     # 每一列可容納的組數為 3
     每列組數 = 3
     組累計 = 0
     列累計 = 0
     目前組別 = 0
     for 列 in range(1,10+組加行):
         # 希望在第 1, 4 ,7 列加上組別連結
         if 列 in [1, 4, 7, 10]:
             組累計 += 1
             fileout.write("<tr>")
             outString += "<tr>"
             for 行 in range(9,0,-1):
                 # 組別連結將會放在第 2, 5, 8  行的位置, 且各橫跨 3 行
                 if 行 in [2, 5, 8] :
                     列累計 += 1
                     #目前組別 = 列+每列組數*組累計-列累計
                     fileout.write("<td colspan=\"3\" align=\"center\">第"+str(列+每列組數*組累計-列累計)+"組</td>")
                     outString += "<td colspan=\"3\" align=\"center\">第"+str(列+每列組數*組累計-列累計)+"組</td>"
             fileout.write("</tr>")
             outString += "</tr>"
         else:
             # 將組累計數從增加的列數中扣除, 得到在未加上組連結列之前的列序號, 
             列 -= 組累計
             fileout.write("<tr>")
             outString += "<tr>"
             for 行 in range(9,0,-1):
                 # 設法逐一掃過所有資料, 以便找出符合列印行數與列數的資料
                 for 資料 in library.find("st908306","1"):
                     if(資料.col == 行 and 資料.row == 列):
                         fileout.write("<td>"+str(資料.stud_number)+str(資料.stud_name)+"</td>")
                         outString += "<td><a href=index?stud_number="+str(資料.stud_number)+\
                                             "&stud_name="+str(資料.stud_name)+">"+str(資料.stud_number)+\
                                             str(資料.stud_name)+"</a></td>"
                         有資料 = 1
                 if(有資料 == 0):
                     fileout.write("<td>&nbsp;</td>")
                     outString += "<td>&nbsp;</td>"
                 else:
                     有資料 = 0
             fileout.write("</tr>")
             outString += "</tr>"
     fileout.write("</table></center>")
     outString += "</table></center>"
     超文件收尾 = '''
         </body>
         </html>
         '''
     fileout.write(超文件收尾)
     outString += 超文件收尾
     # 最後記得附加連結表單
     outString += self.menuLink()
     # 改為資料庫存取後, 沒有 filein
     #filein.close()
     fileout.close()
     # 將已經拼湊好的 outString 傳回瀏覽器
     return outString
예제 #10
0
    def doSearch(self, keyword=None, key_num=0, rev_order=False, itemperpage=9, page=1):
        # 這裡的搜尋結果分頁, 先確定搜尋筆數, 然後配合每頁筆數與所在頁面進行局部搜尋, 並將搜尋關鍵字存在 session, 在 Mako 版型檔中取出配合不同頁面進行顯示
        # 以下改為以 pybean 儲存資料
        # 取 count session 值, 內定為 0: cherrypy.session.get('count', 0)
        # 設定 session 中 count 的值: cherrypy.session['count'] = count
        # 先將 keyword 放到 session 中
        if keyword != "":
            cherrypy.session['keyword'] = keyword
        else:
            # 利用 Mako 傳回相關資料
            return "請輸入查詢關鍵字(非 Mako)"
        library = Store(SQLiteWriter(SQLite_data_dir+"/database.sqlite", frozen=False))
        # 動態建立 student 資料表
        student = library.new("student")
        # 以 find 找出所要的一筆資料
        # 設法利用所有欄位名稱拼湊查詢字串
        次序 = 1
        查詢字串 = ""
        for 索引 in ["stud_number", "stud_name", "school_dept", "major", "expt_salary"]:
            if 次序 == 1:
                查詢字串 += "("+索引+" like \"%"+keyword+"%\")"
            else:
                查詢字串 += "OR ("+索引+" like \"%"+keyword+"%\")"
            次序 += 1
            
        #查詢資料 = library.find("student",查詢字串)
        # 先確認查詢總筆數
        totalitem = library.count("student",查詢字串)
        # 處理查詢無資料傳回的情況
        if totalitem == 0:
            return "查無對應資料"
        totalpage = math.ceil(totalitem/int(itemperpage))
        # 若索引從 1 開始
        #starti = int(itemperpage) * (int(page) - 1) + 1
        # 若索引從 0 開始
        starti = int(itemperpage) * (int(page) - 1)
        endi = starti + int(itemperpage) - 1
        查詢資料 = library.find("student", 查詢字串+" order by stud_number limit "+str(starti)+", "+str(itemperpage))

        個人資料 = []
        for 資料 in 查詢資料:
        #for 資料 in library.find("student","1 order by stud_number limit 1,10"):
            學號 = 資料.stud_number
            姓名 = 資料.stud_name
            科系 = 資料.school_dept
            專長 = 資料.major
            薪水 = 資料.expt_salary
            #更新連結 = "<a href=\"updateForm?stud_number="+學號+"\">"+學號+"</a>"
            # 配合 pybean 0.2.1 將 uuid 改為 id
            更新連結 = "<a href=\"updateForm?id="+str(資料.id)+"\">"+學號+"</a>"
            更新 = "<a href=\"updateForm?id="+str(資料.id)+"\">更新</a>"
            刪除 = "<a href=\"deleteForm?id="+str(資料.id)+"\">刪除</a>"
            個人資料.append([更新連結,姓名,科系,專長,薪水,更新,刪除])
        # 是否要將搜尋所得的個人資料, 以 Mako 套稿處理
        #
        # 根據數列中各 tuple 中的學號(亦即 key data[0])進行排序
        # 個人資料排列後, 必須加以指定成變數, 否則個人資料的內容排序後並未改變
        #個人資料 = sorted(個人資料, key=lambda data: data[0], reverse=True)
        個人資料 = sorted(個人資料, key=lambda data: data[int(key_num)], reverse=int(rev_order))
        #print(個人資料)
        #outString = self.htmlList(個人資料)
        # 由於搜尋結果的分頁顯示, 為特定內容的分頁顯示與一般全部資料的顯示是否要進行區分, 必須在此作決定
        # 由於所有資料的分頁顯示, 是以 itemperpage 與 page 針對所有資料進行資料庫查詢後, 逐批送到 pageList 進行顯示
        # 而資料搜尋是否要每次利用相同的流程處理顯示, 抑或透過將搜尋資料存入 session  然後再由 session 分頁取出顯示, 效益有何差別
        # 也必須在此進行分析
        outString = self.spageList(個人資料,totalitem,itemperpage,page)
        return outString