我是 Python 新手,正在尝试使用 sqlite3 创建一个简单的电话簿。我的问题是我有一个将所有字符串更改为小写的装饰器,所以当我调用 displayPerson 函数时,它会将所有内容更改为小写。我的问题是我可以将 ben.displayPerson 中的属性元组返回到“conn.execute insert values”语句中,而不是放入 ben.name、ben.age、ben.phone(这将忽略装饰器)。
#A decorator to correct uppercase strings
def lowercasewrapper(func):
def wrapper(*args, **kwargs):
return [item.lower() for item in func(*args, **kwargs)]
return wrapper
class People():
numofpeeps = 0
def __init__(self, name, age, phone, fblink):
self.name=name
self.age=age
self.phone=phone
self.fblink=fblink
People.numofpeeps += 1
@lowercasewrapper
def displayPerson(self):
return self.name, self.age, self.phone, self.fblink
ben=People("bEn", "10 years old", "503-405-4021", "http://facebook.com/ben")
#sqlite section
import sqlite3
conn = sqlite3.connect('addressbook.db')
cur=conn.cursor()
conn.execute('''
CREATE TABLE people(name TEXT,
age TEXT, phone TEXT, fblink TEXT)''')
conn.execute("insert into people values (?, ?, ?, ?)", (ben.displayPerson))
cur.close()
conn.commit()
conn.close()
我在 python 解释器中遇到的错误说:
line 33, in <module>
conn.execute("insert into people values (?, ?, ?, ?)", (ben.displayPerson))
ValueError: parameters are of unsupported type
注意:如果我执行 conn.execute ("insert into people values (?, ?, ?, ?)", (ben.name, ben.age, ben.phone))
但是,我想事先使用装饰器,但我不知道该怎么做。