约束 python 函数参数



有没有办法在python中将函数的参数限制为仅一组值,用户应键入要更改的列的名称:

import sqlite3
def update_table(self, id: int, column_name: str, value: str):
conn = sqlite3.connect("myDatabase.db")
c = conn.cursor()
c.execute("UPDATE table SET " + column_name + " = " + value +
" WHERE id=" + id + ";")
c.commit()
c.close() 
id = input("Type the id: ")
c_name = input("Type the column name: ")
value = input("Type the new value: ")
update_table(id, c_name, value)

问题是,如果用户键入不存在的列的名称,则代码将中断。限制这种选择的最佳方法是什么?

这是一个选项:

import sqlite3
def update_table(self, id: int, column_name: str, value: str):
conn = sqlite3.connect("myDatabase.db")
c = conn.cursor()
c.execute("PRAGMA table_info(table_name);")
col_names = set([col[1] for col in c.fetchall()])
assert column_name in col_names, "{} is not a valid column name".format(column_name)
c.execute("UPDATE table SET " + column_name + " = " + value +
" WHERE id=" + id + ";")
c.commit()
c.close()

PRAGMA table_info(table_name);将返回有关表的信息,如果您对其运行fetchall,则如下所示:

[(0, 'id', 'integer', 0, None, 1),
(1, 'one', 'varchar(10)', 0, None, 0),
(2, 'two', 'integer', 0, None, 0)]

每个元组描述一列,其中每列的索引 1 是列名。因此,我们创建了一组可能的列名称来测试...

最新更新