SQLAlchemy принимает все как разные типы данных, пустые строки, строки большей длины
Я использую 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