Использование cdecimal в SQLAlchemy - PullRequest
3 голосов
/ 03 января 2012

Поэтому я пытаюсь использовать cdecimal для хранения денежных значений в моей базе данных. SQLAlchemy Doc

import sys
import cdecimal
sys.modules["decimal"] = cdecimal

Я подключил свою базу данных PostgreSQL следующим образом:

sqlalchemy.url = postgresql+psycopg2://user:password@host:port/dbname

Я настроил модель примерно так:

class Exchange(Base):
    amount = Column(Numeric)
    ...

    def __init__(self, amount):
        self.amount = cdecimal.Decimal(amount)

Однако всякий раз, когда я делаю это, я получаю следующую ошибку:

ProgrammingError: (ProgrammingError) can't adapt type 'cdecimal.Decimal' 'INSERT INTO...

Что я делаю не так?

1 Ответ

7 голосов
/ 03 января 2012

Это работает для меня, пожалуйста, попробуйте это

import sys 
import cdecimal
sys.modules["decimal"] = cdecimal

from sqlalchemy import create_engine, Numeric, Integer, Column
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine('mysql://test:test@localhost/test1')
Base = declarative_base()


class Exchange(Base):
    __tablename__ = 'exchange'
    id = Column(Integer, primary_key=True)
    amount = Column(Numeric(10,2))

    def __init__(self, amount):
        self.amount = cdecimal.Decimal(amount)


Base.metadata.create_all(engine)
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()


x = Exchange(10.5)
session.add(x)
session.commit()

Примечание: у меня на компьютере нет pgsql, поэтому я попробовал mysql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...