mysql-python 的 bigint 格式说明符

Posted

技术标签:

【中文标题】mysql-python 的 bigint 格式说明符【英文标题】:format specifier for bigint of mysql-python 【发布时间】:2015-11-15 04:27:24 【问题描述】:

我的主键声明为:

id bigint PRIMARY KEY

我想提取某个id,并想进一步使用它。

localid = cursor.fetchone()[0]
print type(localid)
query1 = ("Select * from table_name WHERE id= %d;")
cursor.execute(query1, localid)
query2 = ("Select * from table_name WHERE id= 1;")
cursor.execute(query2)
    type(localid) 当前打印为 int,其中获取的值仅为 2 或 3 或 45。 query1 不起作用,而 query2 起作用。 %d 是正确的说明符吗?我不这么认为。 如果获取的数字确实超出了正常int 的范围,那么%d 是否正确?如果没有,用什么?

额外信息:mysql-python 使用了连接器封装。 Python 2.7

【问题讨论】:

你试过运行这个吗?有用吗? 不,它不起作用。如果我直接使用WHERE id=1;,它确实有效。但如果我使用 %d,它不会。 【参考方案1】:

如果你使用MySQLdb,你可能只需要%sexecute函数中。

您的Mysql-python 确实是MySQLdb

解决方案1`:

query1 = ("Select * from table_name WHERE id= %s;")
cursor.execute(query1, (localid,))

Note: If args is a sequence, then %s must be used as the
      parameter placeholder in the query. If a mapping is used,
      %(key)s must be used as the placeholder.

解决方案2

query1 = ("Select * from table_name WHERE id= %d;" % localid)
cursor.execute(query1)

详细说明Mysqldb.cursors

class BaseCursor(__builtin__.object)
 |  A base for Cursor classes. Useful attributes:
 |  
 |  description
 |      A tuple of DB API 7-tuples describing the columns in
 |      the last executed query; see PEP-249 for details.
 |  
 |  description_flags
 |      Tuple of column flags for last query, one entry per column
 |      in the result set. Values correspond to those in
 |      MySQLdb.constants.FLAG. See MySQL documentation (C API)
 |      for more information. Non-standard extension.
 |  
 |  arraysize
 |      default number of rows fetchmany() will fetch
 |  
 |  Methods defined here:
 |  execute(self, query, args=None)
 |      Execute a query.
 |      
 |      query -- string, query to execute on server
 |      args -- optional sequence or mapping, parameters to use with query.
 |      
 |      Note: If args is a sequence, then %s must be used as the   #notice
 |      parameter placeholder in the query. If a mapping is used,
 |      %(key)s must be used as the placeholder.
 |      
 |      Returns long integer rows affected, if any
 |

【讨论】:

好的,谢谢。解决方案 2 奏效了。你能告诉我为什么我在 cursor.execute() 中传递的localid 不起作用吗? 你在用MySQLdb吗? 不,我使用的是 MySQL-Python 连接器包。

以上是关于mysql-python 的 bigint 格式说明符的主要内容,如果未能解决你的问题,请参考以下文章

BigInt不会转换为正确的日期格式

hive中如何将13位bigint类型的时间戳的转化为毫秒标准时间格式

hive中如何将13位bigint类型的时间戳的转化为毫秒标准时间格式

如何在 Redshift 中将 BIGINT 转换为 DATE?

Bigint 到日期时间

快速精确 bigint 阶乘