Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.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 插入记录的次数与运行模型文件的次数相同_Python_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python 插入记录的次数与运行模型文件的次数相同

Python 插入记录的次数与运行模型文件的次数相同,python,sqlalchemy,flask-sqlalchemy,Python,Sqlalchemy,Flask Sqlalchemy,我在Model.py文件中使用db.Model创建了一个表示例,如下所示: from flask import Flask from flask_sqlalchemy import SQLAlchemy app=Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root@localhost/dbname' app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False

我在Model.py文件中使用db.Model创建了一个表示例,如下所示:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app=Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root@localhost/dbname'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False
db=SQLAlchemy(app)

class dbconfig(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    host = db.Column(db.String(200), unique=False)
    password = db.Column(db.String(50), unique=False)
    user = db.Column(db.String(50), unique=False)
    dbname = db.Column(db.String(25), unique=False)
    drivername = db.Column(db.String(25), unique=False)
    charset = db.Column(db.String(20), unique=False)
    cursorclass = db.Column(db.String(20), unique=False)

    def __init__(self,host,password,user,dbname,drivername,charset,cursorclass):

        self.host=host
        self.password=password
        self.user=user
        self.dbname=dbname
        self.drivername=drivername
        self.charset=charset
        self.cursorclass=cursorclass

    def __repr__(self):
        return '%s,%s,%s,%s,%s' % (self.host,self.user,self.password,self.dbname,self.drivername)

farmautomation = dbconfig('x', 'y','z','xyz','pymysql','utf8mb4','null')
现在,我正在创建表并插入具有以下行的记录:

db.create_all()
db.session.add(farmautomation)
db.session.commit()
dbconfig.query.all()

当我多次运行model.py时,记录被插入的次数与我运行文件的次数相同,但我需要在多次调用该文件后插入记录,请告诉我如何处理

您可以简单地计算没有行:

db.create_all()
rows = dbconfig.query.count()

if rows == 0:
    farmautomation = dbconfig('x', 'y', 'z', 'xyz', 'pymysql', 'utf8mb4', 'null')
    session.add(farmautomation)
    session.commit()
当然,如果需要更具体的说明,您还可以向
count
查询添加过滤器


另外,我强烈建议您使用配置文件保存数据库凭据。

谢谢您的建议,我会将它们存储在confg文件中,如果我插入一条新记录,插入的条件是否相同?我尝试插入新记录,但没有插入,例如:newrecord=dbconfig('x','y','z','xyz','pymysql','utf8mb4','null')然后是session.add_all([farmautomation,newrecord])在代码中的何处执行此操作
newrecord
?另外,何时需要添加更多行?何时行“相同”您不再需要它了吗?根据您的具体条件,可能还有其他方法可以做到这一点,比如为主机添加唯一的约束。是的,这个示例非常通用。如果每个主机都需要相同的东西(或类似的东西),我想您可以添加一个筛选器,比如
rows=dbconfig.query.filter(dbconfig.host='x').count()