我有一个数据库,我想在其中创建一个名为 Employee 的类,仅提供 empid 并从数据库中获取其余部分。
def__init__(self, empid):
conn = sqlite3.connect("employee.db")
cur = conn.cursor()
self.empid = empid
self.name = cur.execute("SELECT name FROM employees WHERE empid = " + str(empid))
self.bday = cur.execute("SELECT bday FROM employees WHERE empid = " + str(empid))
只是当我打印它时它不返回值,而是一个对象。
<sqlite3.Cursor object at 0x104687c00> <sqlite3.Cursor object at 0x104687c00>
如何解决这个问题?
最佳答案
您可以使用fetchone()
来检索查询的第一个匹配项。这将通过索引返回一个 Row
对象(使用 [0]
检索第一个项目),然后您将获得名称:
<b>cursor = </b>cur.execute("SELECT name FROM employees WHERE empid = " + str(empid))
self.name = cursor<b>.fetchone()[0]</b>
但是话虽这么说,以这种方式构建查询是危险的:它可能会导致 SQL injection 。您最好让 execute
正确转义查询:
cursor = cur.execute("SELECT name FROM employees WHERE empid <b>= ?</b>"<b>, (empid,)</b>)
self.name = cursor.fetchone()[0]
由于您同时获取两名员工的姓名和生日,因此您也可以在一个查询中执行此操作,然后将其解压:
cursor = cur.execute("SELECT name<b>, bday</b> FROM employees WHERE empid = ?", (empid,))
self.name<b>, self.bday</b> = cursor.fetchone()
建议使用 ORM 包(例如 SQLAlchemy 或 Django)。
关于Python 类 SQLite3 请求返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48126592/