modify scripts
This commit is contained in:
@ -17,8 +17,10 @@ tbl_name_section = 'books_sections'
|
|||||||
|
|
||||||
|
|
||||||
# 检查 SQLite 版本
|
# 检查 SQLite 版本
|
||||||
|
lower_sqlite_version = False
|
||||||
sqlite_version = sqlite3.sqlite_version_info
|
sqlite_version = sqlite3.sqlite_version_info
|
||||||
if sqlite_version < (3, 24, 0):
|
if sqlite_version < (3, 24, 0):
|
||||||
|
lower_sqlite_version = True
|
||||||
logging.warning(f"当前 SQLite 版本低于 3.24.0,可能不支持 ON CONFLICT 子句。 {sqlite_version}")
|
logging.warning(f"当前 SQLite 版本低于 3.24.0,可能不支持 ON CONFLICT 子句。 {sqlite_version}")
|
||||||
|
|
||||||
# 获取表的列名和默认值
|
# 获取表的列名和默认值
|
||||||
@ -59,6 +61,9 @@ def check_and_process_data(data, tbl_name):
|
|||||||
|
|
||||||
# 插入或更新数据
|
# 插入或更新数据
|
||||||
def insert_or_update_common(data, tbl_name, uniq_key='href'):
|
def insert_or_update_common(data, tbl_name, uniq_key='href'):
|
||||||
|
if lower_sqlite_version:
|
||||||
|
return insert_or_update_common_lower(data, tbl_name, uniq_key)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
processed_data = check_and_process_data(data, tbl_name)
|
processed_data = check_and_process_data(data, tbl_name)
|
||||||
if processed_data is None:
|
if processed_data is None:
|
||||||
@ -85,6 +90,41 @@ def insert_or_update_common(data, tbl_name, uniq_key='href'):
|
|||||||
logging.error(f"Error inserting or updating data: {e}")
|
logging.error(f"Error inserting or updating data: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
# 插入或更新数据
|
||||||
|
def insert_or_update_common_lower(data, tbl_name, uniq_key='href'):
|
||||||
|
try:
|
||||||
|
processed_data = check_and_process_data(data, tbl_name)
|
||||||
|
if processed_data is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
columns = ', '.join(processed_data.keys())
|
||||||
|
values = list(processed_data.values())
|
||||||
|
placeholders = ', '.join(['?' for _ in values])
|
||||||
|
|
||||||
|
# 先尝试插入数据
|
||||||
|
try:
|
||||||
|
sql = f'''
|
||||||
|
INSERT INTO {tbl_name} ({columns}, updated_at)
|
||||||
|
VALUES ({placeholders}, datetime('now', 'localtime'))
|
||||||
|
'''
|
||||||
|
cursor.execute(sql, values)
|
||||||
|
conn.commit()
|
||||||
|
except sqlite3.IntegrityError: # 唯一键冲突,执行更新操作
|
||||||
|
update_clause = ', '.join([f"{col}=?" for col in processed_data.keys() if col != uniq_key]) + ', updated_at=datetime(\'now\', \'localtime\')'
|
||||||
|
update_values = [processed_data[col] for col in processed_data.keys() if col != uniq_key]
|
||||||
|
update_values.append(data[uniq_key])
|
||||||
|
sql = f"UPDATE {tbl_name} SET {update_clause} WHERE {uniq_key} = ?"
|
||||||
|
cursor.execute(sql, update_values)
|
||||||
|
conn.commit()
|
||||||
|
|
||||||
|
# 获取插入或更新后的 report_id
|
||||||
|
cursor.execute(f"SELECT id FROM {tbl_name} WHERE {uniq_key} = ?", (data[uniq_key],))
|
||||||
|
report_id = cursor.fetchone()[0]
|
||||||
|
return report_id
|
||||||
|
except sqlite3.Error as e:
|
||||||
|
logging.error(f"Error inserting or updating data: {e}")
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
# 插入books表,并判断是否需要更新
|
# 插入books表,并判断是否需要更新
|
||||||
def insert_books_index(data):
|
def insert_books_index(data):
|
||||||
|
|||||||
Reference in New Issue
Block a user