我目前正在Python中创建动态sqlite表,这个表的生成过程如下:
year_list = range(start_year, end_year+1)
dbs_to_create = ["Revenue", "Sale", "Rev_Maintenance",...]
for db_name in dbs_to_create:
concat_string = ""
for year_used in year_list:
concat_string += ", '{}' REAL".format(str(year_used))
cursor.execute("CREATE TABLE IF NOT EXISTS {} ( Project_name TEXT PRIMARY KEY{});".format(db_name, concat_string))
完成此操作后,我现在通过以下语句将一个项目插入到表“Revenue”中,然后创建一个行,其中Project_name列的名称为Project 1。(年份范围为2022-2051)现在具有其列标题的值。因此,该行将类似于“项目1,2022,2023,...,2051)。但是,我希望除Project_name之外的所有其他列都保持值Null,直到我再次更新它。这就引出了问题2,下面的代码还包含将列值更新为每年各自收入的语法。然而,尽管语法看起来像“UPDATE Revenue SET '2038' = 50000 WHERE Project_name ='Project 1'”,但当传递到游标.execute时,它仍然不更新Revenue值。
cursor.execute("SELECT * FROM Revenue WHERE Project_name = ?", (project_number,))
if cursor.fetchone() is None:
cursor.execute("INSERT INTO Revenue (Project_name) VALUES (?);", (project_number,))
conn.commit()
else:
cursor.execute("UPDATE Revenue SET '{}' = {} WHERE Project_name='{}'".format(curr_year, revenue_cell_val, project_number))
conn.commit()
2条答案
按热度按时间qhhrdooz1#
将您的 insert 语句修改为:
对于 * 更新 *:
如果有帮助就告诉我
brccelvz2#
提供问题的代码实际上是正确的,结果是Visual Studio代码的SQLite Viewer扩展由于某种原因没有更新值。然而,使用不同的SQL浏览器程序(如HeidiSQL)打开数据库确实会在正确的列中显示正确的值。