为啥我不能在 python 中获取 sql 语句?

Posted

技术标签:

【中文标题】为啥我不能在 python 中获取 sql 语句?【英文标题】:why can't I fetch sql statements in python?为什么我不能在 python 中获取 sql 语句? 【发布时间】:2010-09-23 13:39:03 【问题描述】:

我有一个非常大的表(374870 行),当我运行以下代码时,时间戳最终只是一个长整数,值为 374870.... 我希望能够获取表中的所有时间戳。 ..但我得到的只是一个长整数:S

import mysqldb

db = MySQLdb.connect(
                host    = "Some Host",
                user    = "SOME USER",
                passwd  = "SOME PASS",
                db      = "SOME DB",
                port    = 3306

        )

sql = "SELECT `timestamp` from `table`"

timestamps = db.cursor().execute(sql)

【问题讨论】:

【参考方案1】:

试试这个:

cur = db.cursor()
cur.execute(sql)
timestamps = []
for rec in cur:
    timestamps.append(rec[0])

【讨论】:

此解决方案有效,谢谢 eumiro。还是有点恼火 fetchall() 不起作用。 你可以把我的第四行改成for rec in cur.fetchall():,这样也行 arg,大脑变得糊状了。这就是我搞砸的。获取函数属于游标对象:S【参考方案2】:

你需要在游标上调用@987654321@来获取多于一行,或者在循环中调用fetchone()直到它返回None

【讨论】:

问题是时间戳最终是一个长整数......可能是由于我的表很大。所以 fetchone() fetchmany() 或 fetchall() 不适用于时间戳,因为 long int 对象没有这些功能... @Richard,374870 并不是一个真正的大表。试试我的回答,你会看到timestamps 列表可以容纳你的数据。如果您告诉我它现在的样子,我们可以尝试将其转换为您需要的任何格式。 @Richard: fetchone 和朋友是 cursor 方法。看我的回答。【参考方案3】:

考虑您得到的不是很长的整数是查询结果中的行数的可能性。

考虑阅读文档 (PEP 249) ... (1) 未定义 cursor.execute() 的返回值;您所看到的内容是您的数据库所特有的,出于可移植性的考虑,不应依赖这些内容。 (2)你需要做results = cursor.fetchone|many|all()或者遍历光标...for row in cursor: do_something(row)

【讨论】:

以上是关于为啥我不能在 python 中获取 sql 语句?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能在动态 SQL 的 DDL/SCL 语句中使用绑定变量?

为啥我不能在立即执行语句中使用绑定变量?

为啥我不能为 SQL Server 2019 创建外部语言?

java中sql语句为啥不能出现 * ?

为啥我不能准备这个 sql 语句来设置 auto_increment?

为啥我的硒预期条件不能作为 python if 语句中的条件工作?