我想使用python的uuid()
函数来分配我的MySQL id而不只是一个整数和AUTOINCREMENT
。
但是,如果在创建对象时生成uuid()
,也会很好。我之前没有广泛使用SQL。因此,我能看到这样做的唯一方法是在python代码中创建一个新对象,运行uuid()
并手动分配它,但这似乎是不必要的。
有没有办法将其集成到MySQL数据库中?
如果是,我分配给该列的数据类型是什么? VARCHAR?
答案 0 :(得分:1)
MySQL没有真正的UUID支持 - 您可以将UUID存储在CHAR(32)
列中,尽管您的索引可能不喜欢它。
The SQLAlchemy docs提供以下使用Python uuid
与任何数据库的方法:
from sqlalchemy.types import TypeDecorator, CHAR
from sqlalchemy.dialects.postgresql import UUID
import uuid
class GUID(TypeDecorator):
"""Platform-independent GUID type.
Uses Postgresql's UUID type, otherwise uses
CHAR(32), storing as stringified hex values.
"""
impl = CHAR
def load_dialect_impl(self, dialect):
if dialect.name == 'postgresql':
return dialect.type_descriptor(UUID())
else:
return dialect.type_descriptor(CHAR(32))
def process_bind_param(self, value, dialect):
if value is None:
return value
elif dialect.name == 'postgresql':
return str(value)
else:
if not isinstance(value, uuid.UUID):
return "%.32x" % uuid.UUID(value)
else:
# hexstring
return "%.32x" % value
def process_result_value(self, value, dialect):
if value is None:
return value
else:
return uuid.UUID(value)
通过使用此代码段,您还可以打开以后切换到Postgres的可能性, 具有本机UUID支持的数据库。
至于初始化对象:在创建新对象时分配新的uuid.uuid4()
是正确的;数据库(尤其是没有UUID支持的数据库)无法为您执行此操作。