使用blob作为SQLAlchemy中的主键和MySQL数据库

时间:2017-11-09 08:26:57

标签: python mysql database sqlalchemy flask-sqlalchemy

我有一个数据库,其中主键应该是256字节的数据,这是我从另一个应用程序获得的ID。

我的问题是SQLAlchemy不输出主键的长度参数,即使它涉及的字段在使用create_all时指定了它。

模型

class Route(db.Model):
    assignmentId = db.Column(db.Binary(256), primary_key=True, nullable=False)

我尝试过的事情

  • 在PrimaryKey表选项中提供mysql_length,但这会被拒绝,因此无效。错误:

sqlalchemy.exc.ArgumentError: Argument 'mysql_length' is not accepted by dialect 'mysql' on behalf of <class 'sqlalchemy.sql.schema.PrimaryKeyConstraint'

  • 通过手动输出包含所需长度参数的SQL语句来创建表(Works,但我真的希望避免像这样回避ORM)

  • 其他没有任何结果的东西

我知道,我的问题非常具体,但对解决方案的任何帮助都非常感谢。谢谢:))

2 个答案:

答案 0 :(得分:2)

我试过这个并且有效:

class Test(db.Model):
    __tablename__ = 'test'
    assignmentId = db.Column(db.BINARY(64), primary_key=True, nullable=False)
    name = db.Column(db.String(64))

结果:

MariaDB [ioc_eventdb]> describe test;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| assignmentId | binary(64)  | NO   | PRI | NULL    |       |
| name         | varchar(64) | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

答案 1 :(得分:0)

我没有得到sqlalchemy的答案。但是:

您是否会有一个外部应用程序(除了您的python应用程序)更新数据的场景。如果是,那么您需要在数据库中指定约束。

如果您的应用程序将控制数据库,您可以始终确保在将应用程序保存到数据库之前验证应用程序中的输入。