Python 类 SQLite3 请求返回对象

标签 python sqlite

我有一个数据库,我想在其中创建一个名为 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/

相关文章:

sqlite - 如何计算时差 HH :MM in a table?

java - 从 sqliite 数据库获取的数据将单行的多个实例返回到 JTable

python - 我试图从 clrs 书中实现队列,但它没有按预期工作?我的代码有什么问题

SQLite3附加数据库性能

ios - 没有这样的表 Sqlite 错误 iOS

python - 在python中生成除特定数字之外的范围内的随机不重复数字

sqlite - SQLite 中是否有 PRAGMA table_info ('mytable' ) 的等效 SELECT 语句?

python - Python的bool排序有定义吗?

Python 相当于 R 中的 "library(help = PackageName)"和 "?FunctionName"(即 help() 函数)

python - 用于从 1d 数组中选择元素的 2d 索引