繁体   English   中英

为什么在使用 SQL 服务器使用 flask_sqlalchemy 插入简单数据时出现此错误?

[英]Why am I getting this error inserting simple data using flask_sqlalchemy using SQL Server?

SQLAlchemy 版本:2.0.1
Flask-SQLAlchemy 版本:3.0.3

我正在尝试使用 flask_alchemy package 将联系人 forms 从我的 python flask web 应用程序插入到我的 SQL 服务器数据库中,但出现以下错误:

sqlalchemy.exc.DBAPIError: (pyodbc.Error) ('HY104', '[HY104] [Microsoft][ODBC SQL Server Driver]Invalid precision value (0) (SQLBindParameter)')
[SQL: INSERT INTO [ContactForms] (first_name, last_name, email, phone, msg) OUTPUT inserted.id VALUES (?, ?, ?, ?, ?)]
[parameters: ('John', 'Doe', 'johndoe@email.com', '555-555-5555', "Hello, I'd like to inquire about your services.")]
(Background on this error at: https://sqlalche.me/e/20/dbapi)

我的Model:

class ContactFormsTable(db.Model):
    __tablename__ = "ContactForms"
    id = db.Column("id", db.Integer, primary_key=True)
    first_name = db.Column (db.VARCHAR(25), nullable=False)
    last_name = db.Column (db.VARCHAR(25), nullable=False)
    email = db.Column (db.VARCHAR(75), nullable=False)
    phone = db.Column (db.CHAR(12), default=None, nullable=True)
    msg = db.Column (db.TEXT, nullable=False)

我的插入语句:

new_contact_form = ContactFormsTable(
            first_name="John",
            last_name="Doe",
            email="johndoe@email.com",
            phone="555-555-5555",
            msg="Hello, I'd like to inquire about your services."
        )
        db.session.add(new_contact_form)
        db.session.commit()

SQL 服务器表架构:

在此处输入图像描述

该架构与它显示的一样,其中id被列为主键。

我最初在 SQL 服务器表中设置了自动增量,但尝试将其关闭但仍然无效。 我认为它与id列有关但不确定

我尝试将phone列更改为varchar(15)但仍然出现相同的错误

使用香草sqlalchemy我的连接字符串一切正常,但在这里切换到flask_sqlalchemy并使用db.model而不是sqlalchemy.Table

我的__init__.py

from flask import Flask
from .extensions import db
from .routes.routes import pages
from .routes.api import api
import os
import pyodbc

def create_app():
    app = Flask(__name__)
    app.config["SQLALCHEMY_DATABASE_URI"] = f'mssql+pyodbc://@{SERVER_NAME}/{DEV_DB}?driver={ODBC_18_DRIVER}&UID=USERNAME&PWD=PASSWORD' 
    db.init_app(app)
    app.register_blueprint(pages)
    app.register_blueprint(api)
    app.secret_key = SECRET_KEY
    return app

app = create_app()

extensions.py

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

我的主要路线:

from flask import Blueprint, render_template
from ..extensions import db

pages = Blueprint("pages", __name__, template_folder="templates", static_folder="static")

@pages.route('/')
def home():
    new_contact_form = ContactFormsTable(
            first_name="John",
            last_name="Doe",
            email="johndoe@email.com",
            phone="555-555-5555",
            msg="Hello, I would like to inquire about your services."
        )

    db.session.add(new_contact_form)
    db.session.commit()
    return render_template('home.html')

解决了

这是通过更新我的 Microsoft SQL 服务器驱动程序解决的。

感谢@GordThompson 的评论

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM