我有一个sqlite数据库,如下所示:
=TRIM(RIGHT(SUBSTITUTE(J3," ",REPT(" ",30)),30))
我想将数据保存到sqlite数据库。我将从用户那里获得id user_id name data
和name
。在这里,我已经编写了保存数据的代码。但是问题是,如果用户输入相同的数据,则会将其保存。我不希望再次保存相同的数据。我使用if else条件,但它仅检查第一行。如何使其检查多行。如何使其成为可能
这是代码:
data
表中存储的数据:
from flask import Flask, request, jsonify, abort, url_for
from flask_httpauth import HTTPBasicAuth
from flask_sqlalchemy import SQLAlchemy
from passlib.apps import custom_app_context as pwd_context
import datetime
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/data_logs2.db'
db = SQLAlchemy(app)
auth = HTTPBasicAuth()
idd = 1
class PersonData(db.Model) :
__tablename__ = 'person_data'
id = db.Column(db.Integer, primary_key = True)
user_id = db.Column(
db.Integer,
nullable=False
)
name = db.Column(db.String(128))
data = db.Column(db.String(128))
@app.route('/savedata',methods=['POST'])
def save_data():
name = request.form['name']
datas = request.form['data']
print()
personData = PersonData.query.filter_by(user_id=idd).first()
if personData:
if personData.data != datas:
personData = PersonData(user_id = idd, name = name, data =datas)
db.session.add(personData)
db.session.commit()
elif personData.name != name:
personData = PersonData(user_id = idd, name = name, data =datas)
db.session.add(personData)
db.session.commit()
else:
personData.data = datas
db.session.commit()
else:
personData = PersonData(user_id = idd, name = name, data =datas)
db.session.add(personData)
db.session.commit()
return jsonify({'success':'true'})
if __name__ == '__main__':
db.create_all()
app.run(host='0.0.0.0', port=5001)
必需的输出存储在表中
id user_id name data
1 1 steve1 sample data1
2 1 steve2 sample data2
3 1 steve3 sample data3
4 1 steve3 sample data3
5 1 steve2 sample data2
6 1 steve5 sample data5
答案 0 :(得分:2)
在较小的数据集中,您可以通过获取所有行来轻松解决它:
personData = PersonData.query.filter_by(user_id=idd).all()
并对其进行测试:
for row in personData:
if (...)
您还可以尝试选择与新数据匹配的数据(使用and_):
from sqlalchemy import and_
personData = PersonData.query.filter(and_(user_id=idd, name=name, data=datas).first()
if personData:
print("You already have this data in db!")
但是,如果您有很多行,它可能会变慢,最好使用约束在数据库级别进行管理。 here对此进行了解释:
更改表
votes
添加唯一的unique_index
(user
,address
);
我不完全理解您的用例,但是在我看来,应该有一种更好的结构化数据的方法。
例如,name
列的含义是什么?
此外,与您的问题无关,但我建议根据PEP8 convention为变量命名,
因此命名变量person_data
胜过personData
。