WithSqlite.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. import sqlite3
  2. # [todo 0]
  3. # 1. 检查commands[5]是否为dbPath, 不是话报错(syntax error)
  4. # ↑↑↑ 但是总感觉输入检查应该放在Controller里面(也就是放在前端去检查)...
  5. # 前端检查语法, 冲突代回到后端去检查, 然后顺便就执行了
  6. # 2. 命令里面的<KB>, <CL>, <EV>都代入检查是否存在, 区分add/edit(INSERT INTO/UPDATE)
  7. # 3. 匹配SQL关键字
  8. # 4. 拼完以后进行to和in的判断
  9. # 5. 按正确的顺序拼SQL语句
  10. # 6. 执行
  11. dbPath = "dev.db"
  12. def Exec_one(dbPath, commands):
  13. con = sqlite3.connect(dbPath)
  14. cur = con.cursor()
  15. cur.execute(commands)
  16. con.commit()
  17. re = cur.fetchall()
  18. con.close()
  19. return re
  20. def Exec_many():
  21. pass
  22. def IsExist(exec_commands, returnBool=True):
  23. tableName = str(exec_commands[1]).capitalize()
  24. ItemName = str(exec_commands[2])
  25. sqls = "SELECT name FROM {table} WHERE name='{name}'".format(table=tableName, name=ItemName)
  26. ie = Exec_one(dbPath, sqls)
  27. if ie != [] and returnBool == False:
  28. return ie
  29. elif ie != [] and returnBool == True:
  30. return True
  31. elif ie == []:
  32. return False
  33. else:
  34. # Alt.Err(errCode)
  35. print("err <Code>: unexpected error in existence check")
  36. # [todo 4]
  37. def Secondary_response():
  38. pass
  39. class objBoard():
  40. def __init__(self, dbPath, previousPath, currentPath, boardName) -> None:
  41. self.dp = dbPath
  42. self.pp = previousPath
  43. self.cp = currentPath
  44. self.name = boardName
  45. def select_board(self, aliveOnly=True):# 不太对劲, 应该在IsExist的时候就已经可以得到结果了
  46. if aliveOnly == True:
  47. sqls = "SELECT name FROM Board WHERE name='{name}' AND status='alive';".format(name=self.name)
  48. elif aliveOnly == False:
  49. sqls = "SELECT name FROM Board WHERE name='{name}';".format(name=self.name)
  50. Exec_one(self.dp, sqls)
  51. # [todo 4]
  52. # return sqls
  53. def add_board(self):
  54. sqls = "INSERT INTO Board VALUES(null, '{name}', 'alive');".format(name=self.name)
  55. Exec_one(self.dp, sqls)
  56. def delete_board(self):
  57. sqls = "UPDATE Board SET status='deleted' WHERE name='{name}';".format(name=self.name)
  58. Exec_one(self.dp, sqls)
  59. def edit_board():
  60. # 修改了Board之后关联的分类和事件也要变, 而且要先修改关系最后变board名称
  61. # 1. 查找CL和EV里面和这个KB的关联
  62. # 2. 修改关联的KB-name
  63. # 3. 修改KB的name
  64. sqls = ""
  65. def move_board():
  66. print("err <Code>: syntax error")
  67. class objClass():
  68. def __init__(self, dbPath, previousPath, currentPath, boardName) -> None:
  69. self.dp = dbPath
  70. self.pp = previousPath
  71. self.cp = currentPath
  72. self.name = boardName
  73. def select_class(self, aliveOnly=True):# 不太对劲, 应该在IsExist的时候就已经可以得到结果了
  74. if aliveOnly == True:
  75. sqls = "SELECT name FROM Class WHERE name='{name}' AND status='alive';".format(name=self.name)
  76. elif aliveOnly == False:
  77. sqls = "SELECT name FROM Class WHERE name='{name}';".format(name=self.name)
  78. Exec_one(self.dp, sqls)
  79. # [todo 4]
  80. # return sqls
  81. def add_class(self):
  82. sqls = "INSERT INTO Class VALUES(null, '{name}', 'alive');".format(name=self.name)
  83. Exec_one(self.dp, sqls)
  84. def delete_class(self):
  85. sqls = "UPDATE Class SET status='deleted' WHERE name='{name}';".format(name=self.name)
  86. Exec_one(self.dp, sqls)
  87. def edit_class():
  88. sqls = ""
  89. def move_class():
  90. pass
  91. class objevent():
  92. pass
  93. def bp():
  94. pass
  95. def home(): # IE就能解决了好像
  96. sqls = "SELECT name FROM sqlite_master WHERE type='table' AND name is NOT 'sqlite_sequence';"
  97. Exec_one(dbPath, sqls)
  98. # Regular Start
  99. def Regular(dbPath, exec_commands):
  100. # try:
  101. ie = IsExist(exec_commands)
  102. print("is exist: ", ie)
  103. tableName = str(exec_commands[1]).capitalize()
  104. # to的情况待处理
  105. itemName = str(exec_commands[2])
  106. exec_flag = False
  107. if ie == True:
  108. pass
  109. elif ie == False:
  110. pass
  111. elif exec_flag == True:
  112. # 有个数据库锁定的异常待处理(Multi-user)
  113. Exec_one(dbPath, sqls)
  114. if __name__ == "__main__":
  115. while(1):
  116. sy_i = input("sql: ").split(" ")
  117. Regular(dbPath, sy_i)