如何在 MySQL DB 中使用 UUID 而不是整数

Ale*_*ley 6 python mysql uuid

我想使用 python 的uuid()函数来分配我的 MySQL id,而不仅仅是一个整数和AUTOINCREMENT.

但是,如果uuid()在创建对象时生成它也会很好。我以前没有广泛使用 SQL。所以,我能看到的唯一方法是在 python 代码中创建一个新对象,运行uuid()并手动分配它,但这似乎没有必要。

有没有办法将它集成到 MySQL 数据库中?

如果是这样,我为该列分配什么数据类型?变量?

pub*_*her 3

MySQL 没有真正的 UUID 支持 \xe2\x80\x93 你可以将 UUID 存储在CHAR(32)列中,尽管您的索引可能不喜欢它。

\n

SQLAlchemy 文档提供了以下使用 Python 的方法uuid与任何数据库的方法:

\n
from sqlalchemy.types import TypeDecorator, CHAR\nfrom sqlalchemy.dialects.postgresql import UUID\nimport uuid\n\nclass GUID(TypeDecorator):\n    """Platform-independent GUID type.\n\n    Uses Postgresql\'s UUID type, otherwise uses\n    CHAR(32), storing as stringified hex values.\n\n    """\n    impl = CHAR\n\n    def load_dialect_impl(self, dialect):\n        if dialect.name == \'postgresql\':\n            return dialect.type_descriptor(UUID())\n        else:\n            return dialect.type_descriptor(CHAR(32))\n\n    def process_bind_param(self, value, dialect):\n        if value is None:\n            return value\n        elif dialect.name == \'postgresql\':\n            return str(value)\n        else:\n            if not isinstance(value, uuid.UUID):\n                return "%.32x" % uuid.UUID(value)\n            else:\n                # hexstring\n                return "%.32x" % value\n\n    def process_result_value(self, value, dialect):\n        if value is None:\n            return value\n        else:\n            return uuid.UUID(value)\n
Run Code Online (Sandbox Code Playgroud)\n

通过使用此代码片段,您还可以保留稍后切换到 Postgres 的可能性,该数据库可以本机 UUID 支持的数据库。

\n

至于初始化对象:你分配一个新的是正确的uuid.uuid4()当你创建一个新对象时,你可以分配一个新的对象,这是正确的;数据库(尤其是不支持 UUID 的数据库)无法为您执行此操作。

\n