[英]Python Class SQLite3 request returns object
我有一个数据库,我想在该数据库中创建一个名为Employee的类,只给出空值,其余的从数据库中获取。
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
cur.execute("SELECT name FROM employees WHERE empid = ?", (empid,))
self.name = cur.fetchone()[0]
cur.execute("SELECT bday FROM employees WHERE empid = ?",(empid,))
self.bday = cur.fetchone()[0]
但实际上,这样更好
cur.execute("SELECT name, bday FROM employees WHERE empid = ?", (empid,))
self,name, self.bday = cur.fetchone()
您可以使用fetchone()
来检索查询的第一个匹配项。 这将通过索引(使用[0]
检索第一个项目)来返回Row
对象,然后获得名称:
cursor = cur.execute("SELECT name FROM employees WHERE empid = " + str(empid))
self.name = cursor.fetchone()[0]
话虽这么说,以这种方式构造查询很危险:它可能导致SQL注入 。 您最好让execute
正确地转义查询:
cursor = cur.execute("SELECT name FROM employees WHERE empid = ?", (empid,))
self.name = cursor.fetchone()[0]
由于您同时获取两个雇员的姓名和生日,因此您也可以在一个查询中执行此操作,然后将其解压缩:
cursor = cur.execute("SELECT name, bday FROM employees WHERE empid = ?", (empid,))
self.name, self.bday = cursor.fetchone()
并且建议使用ORM包(例如SQLAlchemy或Django)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.