小编Mat*_*kic的帖子

如果 MySQL ENUM 值的名称中有空格,如何定义 Python Enum 属性?

我有这样的 PythonEnum类:

from enum import Enum
class Seniority(Enum):
    Intern = "Intern"
    Junior_Engineer = "Junior Engineer"
    Medior_Engineer = "Medior Engineer"
    Senior_Engineer = "Senior Engineer"
Run Code Online (Sandbox Code Playgroud)

在MYSQL数据库中,资历ENUM列有值“实习生”、“初级工程师”、“中级工程师”、“高级工程师”。

问题是我收到一个错误:

LookupError: "Junior Engineer" is not among the defined enum values
Run Code Online (Sandbox Code Playgroud)

当我调用查询时发生此错误:

UserProperty.query.filter_by(full_name='John Doe').first()
Run Code Online (Sandbox Code Playgroud)

seniorityUserProperty模型中的枚举属性。

class UserProperty(db.Model):
   ...
   seniority = db.Column(db.Enum(Seniority), nullable=True)
   ...
Run Code Online (Sandbox Code Playgroud)

对于这个类,我使用marshmallow SchemaEnumField来自marshmallow_enum包定义了 Schema 类:

class UserPropertySchema(Schema):
    ...
    seniority = EnumField(Seniority, by_value=True)
    ...
Run Code Online (Sandbox Code Playgroud)

在这种情况下该怎么办,因为我无法定义带有空格的python类属性名称。如何强制python使用已定义属性的值而不是属性名称?

python mysql enums marshmallow

10
推荐指数
1
解决办法
556
查看次数

如何在不使用客户端缓存的情况下下载新版本的文件?

我有一个页面,其中有包含用户数据和每一行的表格(每个用户都有自己的名片,这是一个引用存储在服务器上的 pdf 的标签。

   <td class="business_card">
    <a href="/static/users_documents/9/business_card.pdf" target="_blank">
    <img src="/static/images/business_card.png" name="business_card" alt="business_card_image">
    </a>
   </td>
Run Code Online (Sandbox Code Playgroud)

当用户发送 post 请求时,服务器上以前的 pdf 文件被删除并创建新的 pdf。但是,问题是浏览器缓存旧版本的文件,我每次都必须按CTRL+F5硬刷新缓存,然后我才能从服务器而不是缓存中看到文件。

我是否需要使用 JavaScript 来清除缓存?
另外,我对页面的标记引用如下:

https://192.168.2.244/static/users_documents/9/business_card.pdf
Run Code Online (Sandbox Code Playgroud)

该页面的 html 是由 Firefox 创建的,用于显示我的 pdf 文件。

一些可能有帮助的附加信息是我在 Ubuntu 16.04.3 上使用 Nginx 服务器。

html javascript browser-cache

1
推荐指数
2
解决办法
1719
查看次数

如何动态创建 order_by 语句并将其注入到flasksqlalchemy查询中

我正在尝试使用 Flask-sqlalchemy 查询动态创建 order_by 语句。

这是对我的 PurchaseOrder 方法的调用:

pos = PurchaseOrder.get_all_pos(column_order=['id', 'due_date'])
Run Code Online (Sandbox Code Playgroud)

column_order 可以有一个或多个列,我们用来对查询结果进行排序。

class PurchaseOrder(PurchaseOrderDB):

    @classmethod
    def get_all_pos(cls, **kwargs):
        columns = kwargs.pop('column_order', '')
        columns_order = [getattr(cls, column) for column in columns]
        if len(columns_order) != 0:
            pos = cls.query.order_by(columns_order).all()
        else:
            pos = cls.query.all()
        return pos
Run Code Online (Sandbox Code Playgroud)

columns_order 是 InstrumentedAttributes 的列表,当我将该列表传递给 order_by() 方法时,我得到了预期的以下错误:

sqlalchemy.exc.ArgumentError: SQL expression object or string expected, got object of type <class 'list'> instead
Run Code Online (Sandbox Code Playgroud)

那么,当我们不知道传入多少列时,是否有其他方法可以动态创建 order_by 呢?在这种情况下,查询应如下所示:

pos = cls.query.order_by(cls.id, cls.due_date).all()
Run Code Online (Sandbox Code Playgroud)

python flask-sqlalchemy

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