SQLAlchemy 警告:列将不是声明性映射的一部分

Mah*_*ziz 3 python sqlalchemy

尝试使用 python、flask 和 sqlalchemy 构建待办事项列表应用程序;在为数据库创建表时,我收到此错误

我运行这个命令

'from app import db'
Run Code Online (Sandbox Code Playgroud)

我收到此警告:

C:\Users\Mahmoud\.virtualenvs\to-do_list_flask-Gr0Wv-V5\lib\site-packages\sqlalchemy\ext\declarative\base.py:361: SAWarning: Attribute 'item' on class <class 'app.todo'> appears to be a non-schema 'sqlalchemy.sql.column()' object; this won't be part of the declarative mapping
  % (key, cls)
C:\Users\Mahmoud\.virtualenvs\to-do_list_flask-Gr0Wv-V5\lib\site-packages\sqlalchemy\ext\declarative\base.py:361: SAWarning: Attribute 'date' on class <class 'app.todo'> appears to be a non-schema 'sqlalchemy.sql.column()' object; this won't be part of the declarative mapping
  % (key, cls)
Run Code Online (Sandbox Code Playgroud)

如果我执行db.create_all()该表只有一个 id 列

我的脚本:

from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'postgres://postgres:123456@localhost/todo_list'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False


db = SQLAlchemy(app)
class todo(db.Model):
    __tablename__ = 'todo'
    id = db.Column(db.Integer, primary_key=True)
    item = db.column(db.String(500))
    date = db.column(db.Date)

    def __init__(self, item, date):
        self.item = item
        self.date = date

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/submit', methods = ['POST'])
def submit():
    if request.method == 'POST':
        item = request.form['item']
        date = request.form['date']


        data = todo(item, date)
        db.session.add(data)
        db.session.commit()


    return render_template('index.html', item = item, date = date)


if __name__ == '__main__':
  app.run(host='127.0.0.1', port=8000, debug=True)

Run Code Online (Sandbox Code Playgroud)

小智 12

我遇到了同样的错误。原来它只是一个小小的语法错误。列应该是大写的,所以:

id = db.Column(db.Integer, primary_key=True)
item = db.Column(db.String(500))
date = db.Column(db.Date)
Run Code Online (Sandbox Code Playgroud)

应该修复它。