【发布时间】:2020-06-04 14:25:56
【问题描述】:
如果 id 已经存在,我目前有这段代码可以让我更新 mySQL 数据库中的学校数据。但是,我还试图实现的是,如果数据库中不存在 ID,它会插入这些值。这是我目前得到的代码:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/dbName'
db = SQLAlchemy(app)
class Example(db.Model):
__tablename__ = 'schools'
_id = db.Column('_id', db.Unicode, primary_key=True)
establishmentNumber = db.Column('establishmentNumber', db.Unicode)
def __init__(self, id, establishmentNumber):
self.id = id
self.establishmentNumber = establishmentNumber
update_this = Example.query.filter_by(_id=school._id.iloc[0]).first()
update_this.establishmentNumber = 'bob'
db.session.commit()
examples = Example.query.all()
examples
for ex in examples:
print (ex.establishmentNumber)
但是,当我尝试使用以下代码向数据库添加一个全新的学校时,这将正确更新:
new_ex = Example('5c12345scl', 'fifth')
db.session.add(new_ex)
db.session.commit()
我收到此错误:
IntegrityError: (MySQLdb._exceptions.IntegrityError) (1364, "Field '_id' doesn't have a default value")
[SQL: INSERT INTO schools (`establishmentNumber`) VALUES (%s)]
[parameters: ('fifth',)]
(Background on this error at: http://sqlalche.me/e/gkpj)
有谁知道如何摆脱这个错误?
'''''''''''''''''''''''''''''''''''''''''''' '''''''''''' 更新 ''''''''''''''''''''''''''''''''''''''''''''' '''''''''
以上内容现在正在运行。我现在正在尝试组合 add 和 update 函数,以便它检查表中是否存在 id。如果不是,它会插入一个新行。如果是这样,那么它只是更新值。以下是我目前的代码,感谢@James Summers:
class Example(db.Model):
__tablename__ = 'schools'
_id = db.Column('_id', db.Unicode, primary_key=True)
establishmentNumber = db.Column('establishmentNumber', db.Unicode)
laCode = db.Column('laCode', db.Unicode)
urn = db.Column('urn', db.Unicode)
name = db.Column('name', db.Unicode)
phaseOfEducation = db.Column('phaseOfEducation', db.Unicode)
wondeID = db.Column('wondeID', db.Unicode)
def __init__(self, _id, establishmentNumber, laCode, urn, name, phaseOfEducation, wondeID):
self._id = _id
self.establishmentNumber = establishmentNumber
self.laCode = laCode
self.urn = urn
self.name = name
self.phaseOfEducation = phaseOfEducation
self.wondeID = wondeID
def add_or_update(self, _id, establishmentNumber, laCode, urn, name, phaseOfEducation, wondeID):
update_this = Example.query.filter_by(_id=school._id.iloc[0]).first()
if not update_this:
new_ex = Example(school._id.iloc[0], school.establishmentNumber.iloc[0], school.laCode.iloc[0], school.urn.iloc[0], school.name.iloc[0], school.phaseOfEducation.iloc[0], school.wondeID.iloc[0])
db.session.add(new_ex)
db.session.commit()
else:
update_this.establishmentNumber = 'hello'
db.session.commit()
return new_ex
它没有产生任何错误,但也没有添加或更新。谁能看到我做错了什么?
【问题讨论】:
-
有谁知道如何消除此错误? 只需更改表格并将默认值(例如,零)添加到有问题的字段。
-
感谢@Akina 的快速回复。我很抱歉,但我不太明白。我希望将 _id 字段设置为 '5c12345scl' 并将establishmentNumber 设置为 'fifth'。所以,我不想要一个默认值。
-
你问过“如何摆脱这个错误?”。所以你假设其他的一切都是正确的。我给你解决方案。真的 - 错误消息告诉您的程序尝试执行
INSERT INTO schools (`establishmentNumber`) VALUES (%s)并且没有在此查询中设置_id- 这意味着您的代码中有一些逻辑或算法错误。搜索它(我无法帮助你解决这个任务,除了它存在的事实,我不知道烧瓶)。
标签: python mysql database flask-sqlalchemy