此脚本的目的是学习如何结合使用lambda函数和map。
我尝试在sqlite的所有列中插入一个字符串,但是没有显示错误,但是值没有变化。
class DB(SomeDbBase):
def get_columns(self):
res = self.get_cursor().execute("SELECT * FROM EVENTS")
names = list(map(lambda x: x[0], res.description))
return names`
def update_to_last(self,column:str,data:str):
c = self.get_cursor()
print(column,data)
c.execute(
f"UPDATE EVENTS SET
'{column}'='{data}' WHERE ID ='(SELECT last_insert_rowid())'")
self.conn.commit()
if __name__ == "__main__":
d=DB()
columns=d.get_columns()
# this pile of map and lambda's ment to first get all of the columns names
# then add to every string a pair of some fictionary "data" to a list
# then the list is sent to update
map(
lambda x:d.update_to_last(x[0],x[1]),
(list(map(lambda column:[column,"data"],columns)))
)发布于 2021-12-20 22:25:32
map不创建结果列表。当您在map实例上迭代时,它会根据需要生成项。您没有对map实例进行迭代,所以任何东西都不会调用update_to_last。
不要使用map作为副作用。使用常规的for循环。
# No need to turn the map instance into a list first; you
# can iterate over the map directly.
for x in map(lambda column: [column, "data"], columns):
d.update_to_last(x[0], x[1])当然,由于"data"是x[1]的固定值,所以您实际上根本不需要map。
for column in columns;
d.update_to_last(column, "data")另一方面,如果d.update_to_last生成了一个想要存储在列表中的有趣的返回值,您可能会做一些类似的操作
from itertools import repeat
x = list(map(d.list_to_update, columns, repeat("data")))虽然清单理解像
x = [d.list_to_update(c, "data") for c in columns]会更好。
发布于 2021-12-20 22:19:44
你是说像这样的事吗?(相应地更改列名id )
c.execute(f"UPDATE EVENTS SET '{column}'='{data}' WHERE id = (SELECT last_insert_rowid())")
https://stackoverflow.com/questions/70428600
复制相似问题