SQLAlchemyの中にランダムIDS(パイロン)
-
19-09-2019 - |
質問
私は、パイロンとSQLAlchemyのを使用していると私は私がPRIMARY_KEYとして、いくつかのrandoms IDを持っている可能性がどのように思っていた。
解決
最善の方法は、ランダムに生成されたUUIDを使用することです。
import uuid
id = uuid.uuid4()
UUIDデータ型は( - 0.5、その呼ばsqlalchemy.databases.postgres.PGUuid
にsqlalchemyのは、この目的のために、天然のPGのUUIDデータ型を持つ)ようPostgresqlのようないくつかのデータベースでネイティブに利用可能です。 (私はMySQLや他人にこれを具体的に試していないが)また、任意の16バイトのCHARフィールドにUUIDを格納することができる必要があります。
他のヒント
私はこのパターンを使用して、それはかなり良い作品。 ソースの
from sqlalchemy import types
from sqlalchemy.databases.mysql import MSBinary
from sqlalchemy.schema import Column
import uuid
class UUID(types.TypeDecorator):
impl = MSBinary
def __init__(self):
self.impl.length = 16
types.TypeDecorator.__init__(self,length=self.impl.length)
def process_bind_param(self,value,dialect=None):
if value and isinstance(value,uuid.UUID):
return value.bytes
elif value and not isinstance(value,uuid.UUID):
raise ValueError,'value %s is not a valid uuid.UUID' % value
else:
return None
def process_result_value(self,value,dialect=None):
if value:
return uuid.UUID(bytes=value)
else:
return None
def is_mutable(self):
return False
id_column_name = "id"
def id_column():
import uuid
return Column(id_column_name,UUID(),primary_key=True,default=uuid.uuid4)
#usage
my_table = Table('test',metadata,id_column(),Column('parent_id',UUID(),ForeignKey(table_parent.c.id)))
zzzeekけど、私はSQLAlchemyのの著者であるので、これが間違っている場合、彼は知っているだろう、と私は彼に耳を傾けるだろうと信じています。
またはORMマッピングを持つ:
import uuid
from sqlalchemy import Column, Integer, String, Boolean
def uuid_gen():
return str(uuid.uuid4())
Base = declarative_base()
class Device(Base):
id = Column(String, primary_key=True, default=uuid_gen)
これは、より良いデータベースの互換性を提供し、それを文字列として格納します。しかし、あなたはより最適にUUIDを格納し、使用するデータベースの能力を失います。
所属していません StackOverflow