Python 插入记录的次数与运行模型文件的次数相同
我在Model.py文件中使用db.Model创建了一个表示例,如下所示: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
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()
。