files.py 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. # -*- coding: utf-8 -*-
  2. import os
  3. from unicodedata import category
  4. import mysql.connector
  5. from mysql.connector import Error
  6. # 配置数据库连接
  7. DB_CONFIG = {
  8. 'host': '60.204.139.57',
  9. 'user': 'root',
  10. 'password': '1',
  11. 'port': 6003,
  12. 'database': 'files' # 替换为数据库名称
  13. }
  14. # 初始化数据库
  15. def initialize_files_database():
  16. try:
  17. # 连接 MySQL 服务器(不指定数据库)
  18. connection = mysql.connector.connect(
  19. host=DB_CONFIG['host'],
  20. user=DB_CONFIG['user'],
  21. password=DB_CONFIG['password'],
  22. port=DB_CONFIG['port']
  23. )
  24. if connection.is_connected():
  25. print("成功连接到 MySQL 服务器")
  26. cursor = connection.cursor()
  27. # 检查数据库是否存在
  28. cursor.execute(f"SHOW DATABASES LIKE '{DB_CONFIG['database']}';")
  29. result = cursor.fetchone()
  30. if result:
  31. print(f"数据库 {DB_CONFIG['database']} 已存在。")
  32. else:
  33. print(f"数据库 {DB_CONFIG['database']} 不存在,正在创建...")
  34. cursor.execute(f"CREATE DATABASE {DB_CONFIG['database']};")
  35. print(f"数据库 {DB_CONFIG['database']} 创建成功。")
  36. except Error as err:
  37. print(f"连接 MySQL 时发生错误:{err}")
  38. finally:
  39. if connection.is_connected():
  40. cursor.close()
  41. connection.close()
  42. print("MySQL 服务器连接已关闭")
  43. def initialize_files_table(table_name = "category"):
  44. try:
  45. connection = mysql.connector.connect(**DB_CONFIG)
  46. if connection.is_connected():
  47. cursor = connection.cursor()
  48. # 动态创建表,指定字符集为 utf8mb4
  49. create_table_query = f'''
  50. CREATE TABLE IF NOT EXISTS `{table_name}` (
  51. id INT AUTO_INCREMENT PRIMARY KEY,
  52. name VARCHAR(255) UNIQUE,
  53. url VARCHAR(255) UNIQUE
  54. ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
  55. '''
  56. cursor.execute(create_table_query)
  57. print(f"表 {table_name} 初始化成功。")
  58. except Error as err:
  59. print(f"初始化表时发生错误:{err}")
  60. finally:
  61. if connection.is_connected():
  62. cursor.close()
  63. connection.close()
  64. print("MySQL 连接已关闭")
  65. # 插入数据
  66. def insert_url(name, url, table_name="category"):
  67. try:
  68. connection = mysql.connector.connect(**DB_CONFIG)
  69. if connection.is_connected():
  70. cursor = connection.cursor()
  71. # 确保目标文件表存在
  72. initialize_files_table(table_name)
  73. # 插入文件数据到目标表
  74. insert_query = f"INSERT INTO `{table_name}` (name, url) VALUES (%s, %s)"
  75. cursor.execute(insert_query, (name, url))
  76. connection.commit()
  77. # 判断插入是否成功
  78. if cursor.rowcount > 0:
  79. print(f"插入文件数据成功:({name}, {url}) 到表 {table_name}")
  80. file_result = {"status": "success"}
  81. else:
  82. print(f"插入文件数据失败:({name}, {url}) 到表 {table_name}")
  83. file_result = {"status": "failed"}
  84. # 确保 category 表存在
  85. initialize_files_table("category")
  86. # 查询是否已经存在该表名
  87. select_query = "SELECT * FROM `category` WHERE `name` = %s"
  88. cursor.execute(select_query, (table_name,))
  89. existing_category = cursor.fetchone()
  90. if existing_category:
  91. print(f"表名 {table_name} 已经存在,不插入!")
  92. category_result = {"status": "exists"}
  93. else:
  94. # 执行插入 category
  95. insert_query = "INSERT INTO `category` (name) VALUES (%s)"
  96. cursor.execute(insert_query, (table_name,))
  97. connection.commit()
  98. print(f"插入表名成功:({table_name}) 到表 category")
  99. category_result = {"status": "success"}
  100. return {"status": "success", "file_result": file_result, "category_result": category_result}
  101. except mysql.connector.Error as err:
  102. if err.errno == 1062: # Duplicate entry error
  103. print(f"文件 {name} 已存在,不重复插入。")
  104. return {"status": "duplicate", "message": f"文件 {name} 已存在"}
  105. print(f"插入数据时发生错误:{err}")
  106. return {"status": "error", "message": str(err)}
  107. finally:
  108. if connection.is_connected():
  109. cursor.close()
  110. connection.close()
  111. print("MySQL 连接已关闭")
  112. def delete_file(table, rowid, file_path='../uploads'):
  113. # 检查 table 和 rowid 是否为空
  114. if not table or not rowid:
  115. print("表名或名称不能为空!")
  116. return
  117. try:
  118. # 建立数据库连接
  119. connection = mysql.connector.connect(**DB_CONFIG)
  120. if connection.is_connected():
  121. cursor = connection.cursor()
  122. # 确保 table 仅包含合法的表名(为了安全,避免 SQL 注入)
  123. valid_tables = ['image_table', 'another_table'] # 将所有有效表名列出
  124. if table not in valid_tables:
  125. print(f"无效的表名:{table}")
  126. return
  127. # 查询 category 表,检查是否存在该表名
  128. cursor.execute("SELECT * FROM category WHERE name = %s", (table,))
  129. result = cursor.fetchone()
  130. if not result:
  131. print(f"无效的表名:{table}(没有找到对应的记录)")
  132. return
  133. # 执行查询数据库记录的操作
  134. cursor.execute(f"SELECT * FROM {table} WHERE id = %s", (rowid,))
  135. result = cursor.fetchone()
  136. # 如果查询结果不为空,处理数据
  137. if result:
  138. print(f"成功查询到要删除的文件数据")
  139. # 将元组转换为字典,假设你的字段是 id, categoryName, url
  140. columns = [col[0] for col in cursor.description] # 获取列名
  141. result_dict = dict(zip(columns, result)) # 将结果转化为字典
  142. # 获取文件名
  143. file_name = result_dict.get('name') # 这里假设 'name' 是存储文件名的字段
  144. # 如果获取到文件路径,进行删除操作
  145. if file_name:
  146. # 获取当前工作目录
  147. current_path = os.getcwd() # 获取当前目录路径
  148. # 拼接相对路径
  149. file_path = os.path.join(current_path, '..', 'uploads', file_name)
  150. if os.path.exists(file_path):
  151. try:
  152. os.remove(file_path) # 删除文件
  153. print(f"文件 {file_path} 已被删除")
  154. except Exception as e:
  155. print(f"删除文件时发生错误:{e}")
  156. else:
  157. print(f"文件路径 {file_path} 无效或文件不存在")
  158. # 执行删除数据库记录的操作
  159. cursor.execute(f"DELETE FROM {table} WHERE id = %s", (rowid,))
  160. connection.commit()
  161. print(f"成功删除名称为 {rowid} 的记录")
  162. except Error as err:
  163. print(f"删除数据时发生错误:{err}")
  164. finally:
  165. # 确保连接关闭
  166. if connection.is_connected():
  167. cursor.close()
  168. connection.close()
  169. print("MySQL 连接已关闭")
  170. # 查询数据
  171. def fetch_data(table_name):
  172. try:
  173. connection = mysql.connector.connect(**DB_CONFIG)
  174. if connection.is_connected():
  175. cursor = connection.cursor()
  176. # 查询数据
  177. query = f"SELECT * FROM `{table_name}`"
  178. cursor.execute(query)
  179. rows = cursor.fetchall()
  180. print(f"--- 表 {table_name} 的查询结果 ---")
  181. for row in rows:
  182. print(row)
  183. return rows
  184. except Error as err:
  185. print(f"查询数据时发生错误:{err}")
  186. finally:
  187. if connection.is_connected():
  188. cursor.close()
  189. connection.close()
  190. print("MySQL 连接已关闭")
  191. # 主函数
  192. if __name__ == "__main__":
  193. # 初始化数据库
  194. initialize_files_database()
  195. # 示例:插入和查询数据
  196. table_name = "filePath"
  197. insert_url("example_file.mp4", table_name)
  198. fetch_data(table_name)