gpt4 book ai didi

python - 使用 SQLAlchemy (Python) 创建模型对象时生成 GUID

转载 作者:行者123 更新时间:2023-11-29 12:23:54 25 4
gpt4 key购买 nike

我将 postgres 与 SQLAlchemy 结合使用。我想创建配置文件对象并让它们自动生成一个 GUID。但是目前我的个人资料 ID 不存储任何值,例如:

profile = Profile(name='some_profile')
-> print(profile.name)
some_profile
-> print(profile.id)
None

我研究了其他人如何将 GUID 实现到他们的模型中 (How can I use UUIDs in SQLAlchemy?)我知道很多人不建议使用 GUID 作为 ID,但尽管如此我还是想知道哪里出错了。

这是我当前的实现:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String
from sqlalchemy.types import TypeDecorator, CHAR
import uuid

Base = declarative_base()

class GUID(TypeDecorator):
"""Platform-independent GUID type.

Uses Postgresql's UUID type, otherwise uses
CHAR(32), storing as stringified hex values.

"""
impl = CHAR

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).int
else:
# hexstring
return "%.32x" % value.int

def process_result_value(self, value, dialect):
if value is None:
return value
else:
if not isinstance(value, uuid.UUID):
value = uuid.UUID(value)
return value



class Profile(Base):
__tablename__ = 'profile'

id = Column(GUID(), primary_key=True, default=uuid.uuid4)
name = Column(String)

我仍然是 python 的初学者,但据我所知,我将我的个人资料 ID 列的类型声明为 GUID(由 GUID 类设置)。因此,当通过 uuid.uuid4() 在该列中生成默认 GUID 值时,应该会成功存储该值。

我的猜测是 GUID 类没有任何问题,而是我尝试在 id 列中生成默认值的方式有问题。

如有任何帮助,我们将不胜感激!

最佳答案

您的代码是正确的!

提交配置文件后,您可以获得有效的id

profile = Profile(name='some_profile')
-> print(profile.name)
some_profile
-> print(profile.id)
None

# commit
session.add(profile)
session.commit()

# print saved profile
-> print(profile.name)
some_profile
-> print(profile.id)
ff36e5ff-16b5-4536-bc86-8ec02a53cfc8

关于python - 使用 SQLAlchemy (Python) 创建模型对象时生成 GUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52572679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com