У меня есть форма, которая просит пользователя ввести имя таблицы базы данных, а затем мое приложение использует это имя таблицы для выполнения запроса к базе данных MySQL. Я пытаюсь выполнить начальный тест для базы данных, чтобы увидеть, существует ли введенная таблица, а если нет, то сообщить пользователю, что указанное имя таблицы не существует, и повторить попытку. В настоящее время мое приложение открывает стек ошибок и сообщает, что имя таблицы не закрывается. Это не то поведение, которое я преследую. Я хочу сделать это, чтобы остаться на странице, а затем отправить сообщение пользователю, выделив поле формы красным цветом и распечатав сообщение об ошибке под полем. Я могу заставить эту функцию работать на других полях, но не могу заставить ее работать на этом поле. Это мой код в моем файле forms.py.
class RespondentForm(FlaskForm):
path = StringField('Path', validators=[DataRequired()])
tabName = StringField("Table Name (only fill out if you are not sending 'Invitations')", validators=[Optional()])
choices = [('1', 'Invitation'), ('2', 'Initial reminder'), ('3', 'Subsequent reminders')]
TypeOfMail = SelectField('Select Type of Mail', choices=choices)
test = BooleanField('Send Out Test Emails')
submit = SubmitField('Return Recipients')
def validate_path(self, path):
if not os.path.isdir(path.data):
raise ValidationError('Path entered does not exist, please enter correct path')
def validate_table_name(self, tabName):
engine = create_engine('URI')
metadata = MetaData()
try:
test = Table(tabName.data, metadata, autoload=True, autoload_with=engine)
except NoSuchTableError:
raise ValidationError('Table name entered is incorrect, please enter correct table name')
Повышение ValidationError отлично работает для метода validate_path, но не работает для метода validate_table_name. Я предполагаю, что это связано спопробуй принять операторы, кто-нибудь знает функцию, которую я мог бы использовать для проверки, если таблица существует в базе данных и возвращает либо true, либо false? Если есть такая функция, то я думаю, что мой код будет работать.
Любая помощь будет принята с благодарностью.
РЕДАКТИРОВАТЬ:
Я написал функцию, которая проверяет, существует ли таблица и вот она:
def exists(tabname):
engine = create_engine('URI')
metadata = MetaData()
try:
test = Table(tabname, metadata, autoload=True, autoload_with=engine)
return True
except NoSuchTableError:
return False
и затем изменил мой метод validate_table_name на:
def validate_table_name(self, tabname):
if not exists(tabname.data):
raise ValidationError('The table name entered does not exist, please try again')
Функция работает хорошо, но все равно не радует, потому что по какой-то причине я не могу заставить метод validate_table_name выполнить. Я определенно озадачен.