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”列
这显然对您自己创建的表无效