Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » Flask-SQLAlchemy не ясное поведения при работе с sqlite [RSS Feed]

#1 Март 27, 2017 16:14:26

ivn
Зарегистрирован: 2017-01-13
Сообщения: 91
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy не ясное поведения при работе с sqlite

Добрый день.
Есть код, где описана БД и есть связь один ко многим (foreign key) и не ясное до конца поведения скрипта:

 from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)
class Role(db.Model):
    __tablename__= 'roles'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(45), unique=True, nullable=False)
    users = db.relationship('User', backref='role')
    def __repr__(self):
        return '<User %r>' % (self.name)
class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(45), unique=True, nullable=False)
    # contents = db.relationship('Content', backref='author', lazy='dynamic')
    id_roles = db.Column(db.Integer, db.ForeignKey('roles.id'), nullable=False)
db.create_all()
q = Role(name='admins')
db.session.add(q)
db.session.commit()
q = Role(name='users')
db.session.add(q)
db.session.commit()
q = User(name='admin', id_roles=1)
db.session.add(q)
db.session.commit()
q = User(name='user', id_roles=2)
db.session.add(q)
db.session.commit()
q = User(name='user1', id_roles=222)
db.session.add(q)
db.session.commit()
users = User.query.all()
roles = Role.query.all()
print('{}'.format('roles:'))
for el in roles:
    print(el.id, el.name)
print('{}'.format('users:'))
for el in users:
    print(el.name, el.id_roles)

вот этот код, который делает то чего не могу понять, почему такое происходит:
id_roles=222
почему это проходит??
т.е. эти данные записываются в БД, а ведь должна возвращаться ошибка.

Отредактировано ivn (Март 27, 2017 16:17:56)

Офлайн

#2 Март 27, 2017 17:17:53

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy не ясное поведения при работе с sqlite

Я уже писал. Еще раз напишу. Так связи строить не принято. Возможно, если поставить там какой-нибудь флаг, который будет ругаться, оно и не даст записать.
Правильно: создать объект, получить объект для связи, связать. Не надо связывать по id…

Офлайн

#3 Март 28, 2017 15:40:59

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy не ясное поведения при работе с sqlite

Скорей всего дело в sqlite, наверное там не предусмотрены ограничения, на Postgresql же всё нормально, отображается ошибка:

sqlalchemy.exc.IntegrityError

IntegrityError: (psycopg2.IntegrityError) insert or update on table “equipment_ids” violates foreign key constraint “equipment_type_fkey”
DETAIL: Key (type)=(55555555) is not present in table “eq_types”.



Офлайн

#4 Июль 29, 2017 10:13:18

Flask
Зарегистрирован: 2017-07-29
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask-SQLAlchemy не ясное поведения при работе с sqlite

Сделай как в этом туториале по Flask. Там показывают пример с SQLite и SQLAlchemy.

Офлайн

  • Начало
  • » Web
  • » Flask-SQLAlchemy не ясное поведения при работе с sqlite[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version