缩短 SQLite3 插入语句以提高效率和可读性

Shorten SQLite3 insert statement for efficiency and readability

从这个answer:

cursor.execute("INSERT INTO booking_meeting (room_name,from_date,to_date,no_seat,projector,video,created_date,location_name) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", (rname, from_date, to_date, seat, projector, video, now, location_name ))

我想将其缩短为:

simple_insert(booking_meeting, rname, from_date, to_date, seat, projector, video, now, location_name)

第一个参数是 table 名称,可以读取该名称以获取列名列表以格式化 SQLite3 语句的第一部分:

cursor.execute("INSERT INTO booking_meeting (room_name,from_date,to_date,no_seat,projector,video,created_date,location_name)

然后是值子句(插入语句的第二部分):

VALUES (?, ?, ?, ?, ?, ?, ?, ?)"

可以通过统计table中列名的个数来格式化。

我希望我正确地解释了这个问题,您会欣赏这种功能所节省的时间。 python这个函数怎么写? ...是我的问题。

SQLite3 中可能已经有一个 simple_insert() 函数,但我还没有偶然发现它。

如果要插入所有列,则不需要在 INSERT 查询中指定列名。对于这种情况,您可以编写如下函数:

def simple_insert(cursor, table, *args):
    query = f'INSERT INTO {table} VALUES (' + '?, ' * (len(args)-1) + '?)'
    cursor.execute(query, args)

对于您的示例,您可以将其命名为:

simple_insert(cursor, 'booking_meeting', rname, from_date, to_date, seat, projector, video, now, location_name)

请注意,我已选择将 cursor 传递给该函数,您可以选择只依赖它作为全局变量。