我目前正在使用sqlalchemy通过flask-sqlalchemy构建数据模型
该数据库位于Postgresql服务器上
从具有关系的表中删除行时遇到问题.在这种情况下,我有许多治疗类型和一种治疗方法.治疗具有单一治疗类型.
只要我有一个或多个治疗分配了特定治疗类型,我希望不能删除治疗类型.因为现在它在我尝试时被删除了.
我有以下型号:
class treatment(db.Model):
__tablename__ = 'treatment'
__table_args__ = (db.UniqueConstraint('title', 'tenant_uuid'),)
id = db.Column(db.Integer, primary_key=True)
uuid = db.Column(db.String(), nullable=False, unique=True)
title = db.Column(db.String(), nullable=False)
tenant_uuid = db.Column(db.String(), nullable=False)
treatmentType_id = db.Column(db.Integer, db.ForeignKey('treatmentType.id'))
riskResponse_id = db.Column(db.Integer, db.ForeignKey('riskResponse.id'))
class treatmentType(db.Model):
__tablename__ = 'treatmentType'
__table_args__ = (db.UniqueConstraint('title', 'tenant_uuid'),)
id = db.Column(db.Integer, primary_key=True)
uuid = db.Column(db.String(), nullable=False, unique=True)
title = db.Column(db.String(), nullable=False)
tenant_uuid = db.Column(db.String(), nullable=False)
treatments = db.relationship('treatment', backref='treatmentType', lazy='dynamic')
Run Code Online (Sandbox Code Playgroud)
在删除治疗类型之前,我可以在我的"删除"视图中构建一些检查指定治疗的逻辑,但在我看来,这应该是关系数据库的标准功能.换句话说,我一定是做错了.
我删除了这样的治疗类型:
entry = treatmentType.query.filter_by(tenant_uuid=session['tenant_uuid']).all()
try:
db.session.delete(entry)
db.session.commit()
return {'success': …
Run Code Online (Sandbox Code Playgroud) 我目前正在尝试将 Pandas 数据帧拆分为包含每 N 行的未知数量的块。
我曾尝试使用 numpy.array_split() 这个功能,但是将数据帧分成 N 个包含未知行数的块。
是否有一种巧妙的方法可以将 python 数据帧拆分为多个数据帧,每个数据帧都包含来自父数据帧的特定行数
我想查看一些实体的趋势(SysNr)
我的数据跨越3年(2014,2015,2016)
我正在查看大量变量,但会将此问题限制为一个('res_f_r')
我的DataFrame看起来像这样
d = [
{'RegnskabsAar': 2014, 'SysNr': 1, 'res_f_r': 350000},
{'RegnskabsAar': 2015, 'SysNr': 1, 'res_f_r': 400000},
{'RegnskabsAar': 2016, 'SysNr': 1, 'res_f_r': 450000},
{'RegnskabsAar': 2014, 'SysNr': 2, 'res_f_r': 350000},
{'RegnskabsAar': 2015, 'SysNr': 2, 'res_f_r': 300000},
{'RegnskabsAar': 2016, 'SysNr': 2, 'res_f_r': 250000},
]
df = pd.DataFrame(d)
RegnskabsAar SysNr res_f_r
0 2014 1 350000
1 2015 1 400000
2 2016 1 450000
3 2014 2 350000
4 2015 2 300000
5 2016 2 250000
Run Code Online (Sandbox Code Playgroud)
我的愿望是对每个实体(SysNr)进行线性回归并返回斜率和截距
我想要的输出是上面的
SysNr intercept slope
0 …
Run Code Online (Sandbox Code Playgroud) 我目前正在开发一个 CRUD 应用程序,该应用程序最终将跨越一个相当大的数据库,我想使用最佳实践来处理它。
当我设计 Flask 视图时,我目前将所有功能都放在这样的一个视图中。
@userBlueprint.route('/<string:lang>/user', methods=['GET'])
@userBlueprint.route('/<string:lang>/user/<string:function>', methods=['GET', 'POST'])
@userBlueprint.route('/<string:lang>/user/<string:function>/<int:id>', methods=['GET', 'POST'])
def userView(lang=None, id=None, function=None):
if function == None:
pass
elif function == 'delete':
pass
else:
if function == 'update':
pass
elif function == 'new':
pass
Run Code Online (Sandbox Code Playgroud)
可以想象,当考虑所有数据库功能(关系、选择字段选择生成、多租户控制等)时,此视图会变得相当大。
完成相同任务的另一种方法是构建五个这样的视图。
@userBlueprint.route('/<string:lang>/user', methods=['GET'])
def getUsers(lang=None):
pass
@userBlueprint.route('/<string:lang>/user', methods=['POST'])
def newUsers(lang=None):
pass
@userBlueprint.route('/<string:lang>/user/<int:id>', methods=['GET'])
def getUser(lang=None, id=None):
pass
@userBlueprint.route('/<string:lang>/user/<int:id>', methods=['POST'])
def deleteUser(lang=None, id=None):
pass
@userBlueprint.route('/<string:lang>/user/<int:id>', methods=['POST'])
def modifyUser(lang=None, id=None):
pass
Run Code Online (Sandbox Code Playgroud)
当然,这里的缺点是我需要放入大量重复代码。
这两种方法是否被视为“最佳实践”,如果不是,是否还有第三种选择?
我目前正在磨练我的python / excel技能,并且遇到了openpyxl的问题
我试图打开一个工作簿,替换现有表中的行,然后再次保存该工作簿。
理想情况下,我还想先删除表格中的所有行(尽管保留表格结构)
我的初始工作簿包含一个名为“ inputData”的工作表。在这里,我有一个名为“数据”的表,其中A,B,C列和2行数据。
我也有一个名为“ input.csv”的csv文件,其中包含相同的列但4行数据。
当我运行代码时,数据被写入工作表中,但是表结构并未扩展为包含数据的两个新行。
关于如何使用openpyxl更改命名表结构的数据源的任何想法?
import csv
from openpyxl import load_workbook
from openpyxl.worksheet.table import Table, TableStyleInfo
wb = load_workbook(filename = 'workbook.xlsx')
ws = wb["inputData"]
with open('input.csv', newline='', encoding='utf-8-sig') as f:
reader = csv.reader(f, delimiter=';')
for i, row in enumerate(reader):
if not i == 0:
for j, cell in enumerate(row):
ws.cell(row=i+1, column=j+1).value = cell
wb.save('output.xlsx')
Run Code Online (Sandbox Code Playgroud)
我正在努力将一些excel工作表转移到python自动化,并且遇到了速度问题.
我有一个列表,其中包含大约10,000个列表,每个列表包含20个左右的列.我还有一个帐号列表(100.000个数字)
我希望迭代我的列表列表,然后从列表中选择值,如果列表中的帐号与帐户列表中的帐号匹配.
通过运行此代码,我可以得到我想要的结果,但是它很慢.
calc = 0
for row in listOfLists:
if row[1] in Accounts:
calc += row[8]
Run Code Online (Sandbox Code Playgroud)
关于如何优化速度的任何想法?
python ×6
flask ×2
numpy ×2
pandas ×2
crud ×1
loops ×1
openpyxl ×1
optimization ×1
postgresql ×1
relationship ×1
sqlalchemy ×1
view ×1