为啥我不能在 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 创建外部语言?