ids au hasard dans sqlalchemy (pylones)
-
19-09-2019 - |
Question
J'utilise et pylones sqlalchemy et je me demandais comment je pourrais avoir quelques Randoms Ids primary_key.
La solution
la meilleure façon est d'utiliser UUID générés au hasard:
import uuid
id = uuid.uuid4()
types de données UUID sont disponibles nativement dans certaines bases de données telles que Postgresql (SQLAlchemy a une PG UUID type natif à cet effet - à 0,5 appelé son sqlalchemy.databases.postgres.PGUuid
). Vous devez également être en mesure de stocker un UUID dans un champ CHAR 16 octets (bien que je ne l'ai pas essayé spécifiquement sur MySQL ou autres).
Autres conseils
i utilise ce modèle et il fonctionne très bien. source
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)))
Bien que je crois zzzeek est l'auteur de sqlalchemy, donc si cela est faux, il ne saurait, et je l'écoutais.
Ou avec cartographie 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)
il stocke sous forme de chaîne assurant la compatibilité de meilleure base de données. Cependant, vous perdez la capacité à plus optimale stocker et utiliser l'UUID de la base de données.