Случайные идентификаторы в sqlalchemy (опоры)

Если Вы действительно хотите встроить свое приложение Java в рамках Вашего процесса Python, взглянуть на JPype. Это обеспечивает доступ к Java через JNI.

6
задан Cedric 19 September 2017 в 18:41
поделиться

2 ответа

лучший способ - использовать случайно сгенерированные UUID:

import uuid

id = uuid.uuid4()

типы данных uuid изначально доступны в некоторых базах данных, таких как Postgresql (для этой цели SQLAlchemy имеет собственный тип данных uuid PG - в 0.5 он называется sqlalchemy.databases.postgres.PGUuid ). Вы также должны иметь возможность хранить uuid в любом 16-байтовом поле CHAR (хотя я не пробовал это специально для MySQL или других).

9
ответ дан 8 December 2019 в 14:44
поделиться

Я использую этот шаблон, и он работает довольно хорошо. источник

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, поэтому, если это не так, он узнает, и я послушаю его.

5
ответ дан 8 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: