SQLAlchemy принимает все как разные типы данных, пустые строки, строки большей длины - PullRequest
0 голосов
/ 09 июня 2018

Я использую Flask и Flask SQLAlchemy и Flask Test.Я определяю пример модели со строковым столбцом с максимальной длиной 100. Я подумал, что должен получить исключение, если я попытаюсь вставить строку длиной более 100. SQLAlchemy даже позволяет мне вставлять другие типы данных, такие как int.Даже если я определил этот столбец, чтобы иметь тип строки.Или, если я пытаюсь вставить пустую строку, я также не поднимаю исключение.Хотя я установил столбец, чтобы не быть обнуляемым.

Почему SQLAlchemy просто принимает все.Не должно ли быть хотя бы одно исключение?

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_testing import TestCase


db = SQLAlchemy()


def create_app(self):
    app = Flask(__name__)
    app.config['TESTING'] = True
    app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite://"

    db.init_app(app)

    return app


class Example(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)


class MyTest(TestCase):
    def create_app(self):
        return create_app(self)

    def setUp(self):
        db.create_all()

    def tearDown(self):
        db.session.remove()
        db.drop_all()

    def test_example_that_should_work(self):
        example = Example(name="ABC")

        db.session.add(example)
        db.session.commit()

        self.assertEqual(Example.query.count(), 1)

    def test_example__do_not_insert_strings_of_bigger_size(self):
        example = Example(name="ABC"*100)

        db.session.add(example)
        db.session.commit()

        self.assertEqual(Example.query.count(), 0)  # AssertionError: 1 != 0

    def test_example_do_not_insert_different_data_type(self):
        example = Example(name=42)

        db.session.add(example)
        db.session.commit()

        self.assertEqual(Example.query.count(), 0)  # AssertionError: 1 != 0

    def test_example_do_not_insert_nullable(self):
        example = Example(name="")

        db.session.add(example)
        db.session.commit()

        self.assertEqual(Example.query.count(), 0)  # AssertionError: 1 != 0
...