2015-07-07 10 views
1

Я пытаюсь использовать ORM-уровень SQLAlchemy (через Flask-SQLAlchemy == 2.0), и мне нужно поддерживать (глотать и обновлять) некоторые таблицы, созданные с помощью String (Varchars) как первичные ключи. BTW, я использую SQLite в качестве бэкэнд во время разработки, но производственным хранилищем данных будет Oracle.SQLAlchemy с использованием строкового типа данных в качестве первичного ключа

Следующий код должен был создать модель, а затем функция test_setup должна была инициализировать некоторые тестовые данные, но я, по-видимому, могу создавать таблицы с помощью целых чисел в качестве первичных ключей.

# MODEL 
class MAG_BAG(db.Model): 
    """An entity used for the test_setup""" 
    __tablename__ = 'DS_MAG_BAG' 
    BAG_ABBREV = db.Column(db.String(18), primary_key=True) 
    BAG_NM = db.Column(db.String(128)) 
    MAGIC_POWER_DESCR = db.Column(db.String(128)) 
    SORT_ORD = db.Column(db.Integer) 

    def __repr__(self): 
     return '<MAG_BAG {0}>'.format(self.BAG_NM) 

def test_setup(): 
    """Only used during development or testing as a convenience.""" 
    db.create_all() # why this no make DS_MAG_BAG? 
    # 
    if User.query.filter_by(login_id='felix').first() is None: 
     u = User.register('felix', 'cat') 
     e = Entity.register('Magic Bag', 'DS_MAG_BAG', u.id) 
     # u and e populate tables just fine 
     # but section below does nothing 
     for b in [('FSH','Magic Fish Sack'),('CANBAG','Canoe Bag'),('ESC', 'Escalator Bag')]: 
      print(a_bag) 
      a_bag = MAG_BAG(BAG_ABBREV=b[0], BAG_NM=b[1]) 
      db.session.add(a_bag) 
      db.session.commit() 

Возможно ли создание таблиц с PK типами данных, отличных от числовых типов?

+0

Код * определяет * модель, но не создает * таблицу. Итак, как вы скажете SQLAlchemy для создания таблицы и каков результат? –

+0

Первое утверждение в функции test_setup: db.create_all() –

+0

Я не использую 'flask', но здесь не должно быть проблем с вашей настройкой. Я сделал небольшое испытание, получил ваш класс 'MAG_BAG' и создал его в базе данных' sqllite' с 'sqlalchemy': никаких проблем. Вы получаете сообщение об ошибке? – lrnzcig

ответ

Смежные вопросы