Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.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 保存多LPLE数据,无重复数据sqlite sqlachemy flask_Python_Sqlalchemy - Fatal编程技术网

Python 保存多LPLE数据,无重复数据sqlite sqlachemy flask

Python 保存多LPLE数据,无重复数据sqlite sqlachemy flask,python,sqlalchemy,Python,Sqlalchemy,我有一个sqlite数据库,如下所示: id user_id name data 我想将数据保存到sqlite数据库。我将从用户那里获得名称和数据。在这里,我编写了保存数据的代码。但问题是,如果用户输入相同的数据,它就会保存它。我不想再次保存相同的数据。我使用了if-else条件,但它只检查第一行。如何使其检查多行。如何使之成为可能 代码如下: from flask import Flask, request, jsonify, abort, url_for from flask_ht

我有一个sqlite数据库,如下所示:

id  user_id  name   data
我想将数据保存到sqlite数据库。我将从用户那里获得
名称
数据
。在这里,我编写了保存数据的代码。但问题是,如果用户输入相同的数据,它就会保存它。我不想再次保存相同的数据。我使用了if-else条件,但它只检查第一行。如何使其检查多行。如何使之成为可能

代码如下:

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
id  user_id name    data
1   1       steve1  sample data1
2   1       steve2  sample data2
3   1       steve3  sample data3
4   1       steve5  sample data5
需要存储在表中的输出:

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
id  user_id name    data
1   1       steve1  sample data1
2   1       steve2  sample data2
3   1       steve3  sample data3
4   1       steve5  sample data5

在较小的数据集中,您可以通过获取所有行来轻松解决此问题:
personData=personData.query.filter\u by(user\u id=idd).all()

并对其进行测试:

for row in personData:
    if (...)
您还可以尝试选择与新数据匹配的数据(使用):

但是,如果您有许多行,它可能会变慢,最好在数据库级别使用约束进行管理。 解释如下:

更改表格
投票
添加唯一
唯一索引
用户
电子邮件
地址


我不完全理解您的用例,但在我看来,应该有更好的方法来组织数据。
例如,
name
列的含义是什么


另外,与你的问题无关,但我建议你根据,
因此,命名变量
person\u data
比命名变量
personData

更可取。显然,变量
idd
未定义,请修改并更正。此外,建议阅读