【问题标题】:How to create integer of a certain length with Sqlalchemy?如何使用 Sqlalchemy 创建一定长度的整数?
【发布时间】:2016-08-24 20:39:48
【问题描述】:

我尝试了两种方法,但都不起作用,我在 Google 上搜索并没有找到任何合适的解决方案。我的代码如下:

intField = Column(SmallInt(), length=5)

错误提示:

Unknown arguments passed to Column: ['length']

我也试过,知道它不应该工作,这个解决方案:

intField = Column(SmallInt(5))

而且它不起作用,因为这个 SqlAlchemy 数据类型不接受参数。

有什么想法吗?

[更新]

我使用MySQL作为数据库引擎,所以这里的解决方案是导入mysql自己的Integer类型,然后指定我想要的长度。

在上面的例子中,我只需要做:

from sqlalchemy.dialects import mysql

Integer = mysql.INTEGER 

class ...
    ...
    intField = Column(Integer(5))

但我仍然想知道是否有更通用的方法?

【问题讨论】:

  • 为什么使用数字字段而不是 String(6) 并通过验证仅接受数字?
  • 验证、转换和任何相关操作都会增加开销。当涉及计算时,对整数进行运算会更快。我想在这里使用code 作为属性有点误导,让我改变它以更好地解释我的用例。

标签: python mysql sqlalchemy flask-sqlalchemy


【解决方案1】:

MySQL 有 DECIMAL/NUMERIC 类型。

Decimal(5, 0) 用于包含 5 位数字的字段。

仅当您确实需要数字时才使用此选项。如果不对该字段进行数学运算,请选择 String(5) 并验证数字(isdigit() 是您的朋友)。

在 SQLAlchemy 中,将其作为 Numeric field 处理。

【讨论】:

  • 您好,很抱歉造成混淆,使用邮政编码是一个不好的例子。我的意思是问我是否想用这个字段进行计算,并且还想为它指定一个列宽。我该怎么办?
  • @benjaminz 例如使用DECIMAL(5, 0)。在 SQLAlchemy 中,它是一个 Numeric 字段。 docs.sqlalchemy.org/en/latest/core/…
  • 这可能是一个合适的解决方案,您能否更新您的答案以便我接受?谢谢!
  • 我也用 intField 替换了 zipcode 以避免对其他人造成混淆。
猜你喜欢
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 2011-12-27
  • 2013-10-11
  • 1970-01-01
相关资源
最近更新 更多