import sqlite3 import Stateful deType = "sqlite3" dbPath = "dev.db" def IsEixist(tableName, columnName): pass sqls = "" Operate_sqlite3() def BackPrevious(): pass previousPath = "" currentPath = "" # [todo 3] def Secondary_response(): pass def Operate_sqlite3(dbPath, commands): # Commands e.g. # 0 1 2 3 4 5 6 # [add] # ['add', 'board', ''] # ['add', 'class', '', 'to', ''] # ['add', 'event', '', 'to', '', '/', ''] <- 这个应该报错 # ['add', 'event', '', 'to', '/'] # [edit] # ['edit', 'board', '', 'to', ''] # ['edit', 'class', '', 'to', ''] # ['edit', 'class', '', 'to', ''] # ['edit', 'class', '', 'to', ''] # ['edit', 'event', '', 'to', ''] # ['edit', 'event', '', 'in', '', '/', ''] <- 这个应该报错 # ['edit', 'event', '', 'in', '/'] # [delete] # ['delete', 'board', ''] # ['delete', 'class', ''] # ['delete', 'event', ''] # ['delete', 'event', '', 'in', '', '/', ''] <- 这个应该报错 # ['delete', 'event', '', 'in', '/'] # [move] # ['move', 'class', '', 'to', ''] # ['move', 'event', '', 'to', ''] # ['move', 'event', '', 'to', ''] # ['move', 'event', '', 'in', '', '/', ''] <- 这个应该报错 # ['move', 'event', '', 'in', '/'] # [select] # ['select', 'board', ''] # ['select', 'class', ''] # ['select', 'event', ''] # ['select', 'event', '', 'in', '', '/', ''] <- 这个应该报错 # ['select', 'event', '', 'in', '/'] # [..] # [/] # [todo 1] # 1. 检查commands[5]是否为dbPath, 不是话报错(syntax error) # ↑↑↑ 但是总感觉输入检查应该放在Controller里面(也就是放在前端去检查)... # 前端检查语法, 冲突代回到后端去检查, 然后顺便就执行了 # 2. 命令里面的, , 都代入检查是否存在, 区分add/edit(INSERT INTO/UPDATE) # 3. 匹配SQL关键字 # 4. 拼完以后进行to和in的判断 # 5. 按正确的顺序拼SQL语句 # 6. 执行 v = "SELECT * FROM {tableName} WHERE name={name}".format(tableName=str(commands[1]).capitalize(), name="'"+commands[2]+"'") con = sqlite3.connect(dbPath) cur = con.cursor() # 1. exist check try: res = cur.execute(v) con.commit() print("res: ", res.fetchone() is None) # syntax right but not exist: if res.fetchone() is None == True: print("err : could not found, creat? y/n") # Secondary_response() # 2. exec command matched = Stateful.MatchTomlKeys('dev_config.toml', commands, 'sqlite3') print(matched) except: print("err : Syntax error") con.close() if __name__ == "__main__": while(1): sy_i = input("sql: ").split(" ") Operate_sqlite3(dbPath, sy_i)