心理战2.编程错误:无法适应 pyqt sql 'QDate'类型



i使用pyqt gui应用程序,使用以下函数从数据库中提取历史记录

def historique_jr_date(self):
database = QSqlDatabase("QPSQL")
database.setHostName("localhost")
database.setDatabaseName("database")
database.setUserName("postgres")
database.setPassword("password")
database.open()

model_hjd = QSqlTableModel(db=database)
model_hjd.setTable('transactions')

model_hjd.setEditStrategy(QSqlTableModel.OnManualSubmit)

date = str(self.dateEdit_2.text())
selected_day = self.dateEdit_2.date()
last_day = selected_day.addDays(-1)
last_day_str = last_day.toString(self.dateEdit_2.displayFormat())
print(last_day_str)

self.tableView_3.setModel(model_hjd)
self.tableView_3.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
#idx = model_ft.fieldIndex("max(id)")
model_hjd.setSort(7, Qt.DescendingOrder)
model_hjd.select()
filter_ft = "(date_d, time_d) > ('%s'::date, '16:00:00'::time) AND (date_d, time_d) < ('%s'::date, '16:00:00'::time) " % (selected_day, last_day)
model_hjd.setFilter(filter_ft)
self.connection = psycopg2.connect(user="postgres",
password="password",
host="localhost",
database="database")
self.cur = self.connection.cursor()
self.cur.execute( '''SELECT SUM(montant) AS total FROM transactions WHERE (date_d, time_d) > ('%s'::date, '16:00:00'::time) AND (date_d, time_d) < ('%s'::date, '16:00:00'::time)''',(selected_day, last_day))
result = self.cur.fetchall()
for i in result:
o = i[0]
oo = str(o)
self.lineEdit_19.setText(oo)

但是我收到这个错误

self.cur.execute( '''SELECT SUM(montant) AS total FROM transactions WHERE (date_d, time_d) > ('%s'::date, '16:00:00'::time) AND (date_d, time_d) < ('%s'::date, '16:00:00'::time)''',(selected_day, last_day))
psycopg2.ProgrammingError: can't adapt type 'QDate'

并且表格视图根本没有显示任何结果

有办法修复这个吗

selected_daylast_day的类型为QDate。将它们转换为字符串,例如:

(selected_day.toString(Qt.ISODate), last_day.toString(Qt.ISODate))

阅读文档中的QDate.toString()

最新更新