Zuordnung db varchar zu Domänenobjekt bool

Wie behandle ich die Zuordnung von Strings in der Datenbank zu bools im Domänenmodell. Betrachten Sie ein Beispiel, speichern Münzen Flips in einer Datenbank. Für Fälle, in denen es in der Regel nur zwei Werte, wie Köpfe oder Schwänze gibt .

( HINWEIS: Ich weiß, es ist besser in den meisten Fällen auch bools in der Datenbank zu speichern, aber betrachten dies eine akademische Übung)

Ich möchte True in das Modell zu Ende "Köpfe" in der Datenbank, und "Schwänze" in der Datenbank am Ende als False in das Modell.

from sqlalchemy.orm import mapper, sessionmaker from sqlalchemy import Table, MetaData, Column, Integer, String, create_engine from unittest import TestCase class Foo(object): def __init__(self, id, is_heads): self.id = id self.is_heads = is_heads metadata = MetaData() db_foo = Table( 'foo', metadata, Column('id', Integer, primary_key=True), Column('side', String(5), nullable=False)) # heads or tails def data_map(): # what do I need to do here? mapper(Foo, db_foo) class TestMaps(TestCase): def test_map(self): # Setup engine = create_engine('sqlite:///:memory:', echo=True) metadata.create_all(engine, tables=[db_foo]) Session = sessionmaker(bind=engine) session = Session() data_map() expected = Foo(1, False) # Exercise session.add(expected) session.flush() actual = session.query(Foo).first() # Verify self.assertEqual(expected, actual) 

One Solution collect form web for “Zuordnung db varchar zu Domänenobjekt bool”

Werfen Sie einen Blick auf die Erweiterung der vorhandenen Typen der Dokumentation. Das folgende sollte den Trick machen:

 import sqlalchemy.types as types class CoinFlipDataType(types.TypeDecorator): impl = types.String def process_bind_param(self, value, dialect): if value is None: return None assert value in (True, False) return 'heads' if value else 'tails' def process_result_value(self, value, dialect): if value is None: return None assert value in ('heads', 'tails'), value return value == 'heads' def copy(self): return CoinFlipDataType(self.impl.length) def data_map(): mapper(Foo, db_foo, properties={'is_heads': db_foo.c.side}) db_foo = Table( 'foo', metadata, Column('id', Integer, primary_key=True), Column('side', CoinFlipDataType(5), nullable=False)) 
  • SQLAlchemy und leere IN-Klausel
  • Wie kann ich in der sqlalchemy-Session-Abfrage beitreten?
  • Pyramide / SQL Alchemy DetachedInstanceError
  • SQLAlchemie Unterabfrage - Durchschnitt der Summen
  • SQLAlchemie INSERT IGNORE
  • SQLAlchemy viele-to-many-Beziehung auf deklarative Tabellen
  • Ist es möglich, die Ansicht mit der Klasse mithilfe von Mapper in SqlAlchemy zuzuordnen?
  • SQLAlchemy Primärschlüsselzuweisung
  • Sqlalchemie-Kern, fügen Sie mehrere Zeilen aus einem Tupel statt dict
  • Sqlalchemy dynamisches Schema auf Entität zur Laufzeit
  • Abfrage von vielen zu vielen in SQLAlchemy
  • Python ist die beste Programmiersprache der Welt.