繁体   English   中英

Python类SQLite3请求返回对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM