Question

J'utilise et pylones sqlalchemy et je me demandais comment je pourrais avoir quelques Randoms Ids primary_key.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top