小编Hen*_*sen的帖子

如果父行将在SQLAlchemy中被孤立,则阻止删除父行

我目前正在使用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)

python postgresql sqlalchemy relationship flask

8
推荐指数
1
解决办法
901
查看次数

将 Pandas 数据帧拆分为 N 块

我目前正在尝试将 Pandas 数据帧拆分为包含每 N 行的未知数量的块。

我曾尝试使用 numpy.array_split() 这个功能,但是将数据帧分成 N 个包含未知行数的块。

是否有一种巧妙的方法可以将 python 数据帧拆分为多个数据帧,每个数据帧都包含来自父数据帧的特定行数

python numpy pandas

5
推荐指数
1
解决办法
1万
查看次数

使用pandas数据帧的简单线性回归

我想查看一些实体的趋势(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)

python numpy linear-regression pandas

5
推荐指数
1
解决办法
3603
查看次数

关于 Flask CRUD 视图的最佳实践

我目前正在开发一个 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 crud view flask

3
推荐指数
1
解决办法
827
查看次数

使用openpyxl操作现有的Excel表

我目前正在磨练我的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)

链接到文件

python openpyxl

3
推荐指数
2
解决办法
3232
查看次数

加速python列表搜索(嵌套for循环)

我正在努力将一些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 optimization loops

0
推荐指数
1
解决办法
70
查看次数