Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么SQLAlchemy为id主列发送空值?_Python_Sqlalchemy - Fatal编程技术网

Python 为什么SQLAlchemy为id主列发送空值?

Python 为什么SQLAlchemy为id主列发送空值?,python,sqlalchemy,Python,Sqlalchemy,我正在尝试构建一个用户注册页面,并面临以下问题: 出于某种原因,sqlalchemy为postgresql数据库形成了这一行-(null,roman,2021-05-04),但我已经在用户模型中传递了id列是主键(所以不是null) 我通过pgAdmin4在数据库中创建了表 我不知道为什么会发生这种情况,因为我使用了相同的代码,但用于MySQL和SQLite,并且可以正常工作 型号.py class User(UserMixin, db.Model): __tablename__ = '

我正在尝试构建一个用户注册页面,并面临以下问题:
出于某种原因,sqlalchemy为postgresql数据库形成了这一行-
(null,roman,2021-05-04)
,但我已经在用户模型中传递了id列是主键(所以不是null)
我通过pgAdmin4在数据库中创建了表
我不知道为什么会发生这种情况,因为我使用了相同的代码,但用于MySQL和SQLite,并且可以正常工作

型号.py

class User(UserMixin, db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    registration_date = db.Column(db.DateTime, nullable=False)

    def __init__(self, username, registration_date):
        self.username = username
        self.registration_date = registration_date
@app.route('/register', methods=['POST', 'GET'])
def register():
    form = RegistrationForm()
    if form.validate_on_submit():
        user = User(username=form.username.data,
                    registration_date=datetime.now(),
                    )
        db.session.add(user)
        db.session.commit()
        flash('User was created!', 'success')
        return redirect(url_for('login'))
    return render_template('register.html', form=form)
routes.py

class User(UserMixin, db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    registration_date = db.Column(db.DateTime, nullable=False)

    def __init__(self, username, registration_date):
        self.username = username
        self.registration_date = registration_date
@app.route('/register', methods=['POST', 'GET'])
def register():
    form = RegistrationForm()
    if form.validate_on_submit():
        user = User(username=form.username.data,
                    registration_date=datetime.now(),
                    )
        db.session.add(user)
        db.session.commit()
        flash('User was created!', 'success')
        return redirect(url_for('login'))
    return render_template('register.html', form=form)

该列的类型为
INTEGER
PRIMARY\u KEY
,但没有任何默认值,因此当尝试在其中插入值为
null
的行时,将出现错误

如何在postgreSQL上定义表?我建议使用书写的
标识


表的结构不是SQLAlchemy对模型的期望。如果我们让SQLAlchemy创建表格,它将

创建表用户(
序列号不为空,
用户名VARCHAR(20)不为空,
不带时区的注册日期时间戳不为空,
主键(id),
唯一(用户名)
)
所以SQLAlchemy不会尝试插入“id”列

这显然对您自己创建的表无效