当还包括变量条件时,LIKE 在 WHERE 语句中不起作用
LIKE not working in WHERE statement when also including variable condition
使用 Python,我想删除满足两个条件的 SQLite 数据库中的所有行 - gameID
列中的文本不包含 ID
,以及SaleEnd
列中的日期早于日期 data_relevant_period
.
显然是因为 %
有 2 种不同的用途(每个都有自己的作用),我收到错误消息 ValueError: unsupported format character 'I' (0x49) at index 46
我是 Python 的新手(多年来没有使用任何语言编程),所以如果这是基本问题,我深表歉意,我之前确实尝试过很长一段时间来寻找解决方案问.
from datetime import date, datetime
from dateutil.relativedelta import relativedelta
import sqlite3
data_relevant_period = date.today() - relativedelta(days = 14)
try:
sqliteConnection = sqlite3.connect('games.db')
cursor = sqliteConnection.cursor()
# before filling db with new data, delete any lines that do not have an internal game ID and the sale was over 14 days ago
deleteRows = "DELETE FROM GamesData WHERE GameID NOT LIKE '%ID%' AND SaleEnd < '%s'" %(data_relevant_period,)
cursor.execute(deleteRows)
sqliteConnection.commit()
cursor.close()
except sqlite3.Error as error:
print("Failed to delete", error)
finally:
if sqliteConnection:
sqliteConnection.close()
他们自己,两者
deleteRows = "DELETE FROM GamesData WHERE GameID NOT LIKE '%ID%'"
和
deleteRows = "DELETE FROM GamesData WHERE SaleEnd < '%s'" %(data_relevant_period,)
工作正常。
你可以使用 f-strings :
deleteRows = f"DELETE FROM GamesData WHERE GameID NOT LIKE '%ID%' AND SaleEnd < '{data_relevant_period}'"
https://docs.python.org/3/tutorial/inputoutput.html
或者用另一个转义 %
:
deleteRows = "DELETE FROM GamesData WHERE GameID NOT LIKE '%%ID%%' AND SaleEnd < '%s'" %(data_relevant_period,)
附带说明一下,最好使用驼峰式或 snake_case。 Python 的开发人员被要求使用 snake_case,请参阅 PEP-8 了解更多信息,(驼峰式仅适用于 类)。
使用 Python,我想删除满足两个条件的 SQLite 数据库中的所有行 - gameID
列中的文本不包含 ID
,以及SaleEnd
列中的日期早于日期 data_relevant_period
.
显然是因为 %
有 2 种不同的用途(每个都有自己的作用),我收到错误消息 ValueError: unsupported format character 'I' (0x49) at index 46
我是 Python 的新手(多年来没有使用任何语言编程),所以如果这是基本问题,我深表歉意,我之前确实尝试过很长一段时间来寻找解决方案问.
from datetime import date, datetime
from dateutil.relativedelta import relativedelta
import sqlite3
data_relevant_period = date.today() - relativedelta(days = 14)
try:
sqliteConnection = sqlite3.connect('games.db')
cursor = sqliteConnection.cursor()
# before filling db with new data, delete any lines that do not have an internal game ID and the sale was over 14 days ago
deleteRows = "DELETE FROM GamesData WHERE GameID NOT LIKE '%ID%' AND SaleEnd < '%s'" %(data_relevant_period,)
cursor.execute(deleteRows)
sqliteConnection.commit()
cursor.close()
except sqlite3.Error as error:
print("Failed to delete", error)
finally:
if sqliteConnection:
sqliteConnection.close()
他们自己,两者
deleteRows = "DELETE FROM GamesData WHERE GameID NOT LIKE '%ID%'"
和
deleteRows = "DELETE FROM GamesData WHERE SaleEnd < '%s'" %(data_relevant_period,)
工作正常。
你可以使用 f-strings :
deleteRows = f"DELETE FROM GamesData WHERE GameID NOT LIKE '%ID%' AND SaleEnd < '{data_relevant_period}'"
https://docs.python.org/3/tutorial/inputoutput.html
或者用另一个转义 %
:
deleteRows = "DELETE FROM GamesData WHERE GameID NOT LIKE '%%ID%%' AND SaleEnd < '%s'" %(data_relevant_period,)
附带说明一下,最好使用驼峰式或 snake_case。 Python 的开发人员被要求使用 snake_case,请参阅 PEP-8 了解更多信息,(驼峰式仅适用于 类)。