小编Dar*_*iuM的帖子

Python 3.6 DateTime Strptime返回错误,而Python 3.7正常运行

我刚刚为日期数据创建了数据类型,该数据类型返回一个datetime.datetime对象

这是代码:

import datetime


class Date:
    def __new__(cls, dateTime, *args, **kwargs):
        return datetime.datetime.strptime(dateTime, "%Y-%m-%dT%H:%M:%S.%f%z")
Run Code Online (Sandbox Code Playgroud)

所以每次我给这个类一个类时,ISO-8601它应该从字符串中返回datetime对象。

Python 3.7示例:

Date("2018-12-09T08:56:12.189Z")                                        
# Returns => datetime.datetime(2018, 12, 9, 8, 56, 12, 189000, tzinfo=datetime.timezone.utc)
Run Code Online (Sandbox Code Playgroud)

这很好,但是当我在Python 3.6或Python 3.5上使用它时:

# Python 3.5 Traceback
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.5/_strptime.py", line 510, in _strptime_datetime
    tt, fraction = _strptime(data_string, format)
  File "/usr/lib/python3.5/_strptime.py", line 343, in _strptime
    (data_string, format))
ValueError: time data '2018-12-09T08:56:12.189Z' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'

# …
Run Code Online (Sandbox Code Playgroud)

python datetime python-3.6 python-3.7

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

如何在常见的lisp中格式化单个反斜杠?

我目前正在尝试获得... \hlineGNU Common lisp 2.49 的输出,但我无法使格式工作.这是我到目前为止尝试获得一个反斜杠:

(format nil "\ ") => " "
(format nil "\\ ") => "\\ "
(format nil "\\\ ") => "\\ "
Run Code Online (Sandbox Code Playgroud)

我认为双反斜杠会使它工作,为什么反斜杠不会逃避另一个反斜杠?

lisp common-lisp gnu-common-lisp

5
推荐指数
2
解决办法
384
查看次数

使 SQLAlchemy 错误更加用户友好和详细

我有一个这样的模型:

class Company(db.Model):
    __tablename__ = "my_table"
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(128), unique=True, nullable=False)
    slug = db.Column(db.String(128), unique=True, nullable=False)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在使用Flask-SQLAlchemy的类和方法,但这不是重点,假设我有一个执行以下行的视图:

c = Company("Test", "test")
try:
    db.session.add(c)
    db.session.commit()
    return "Added!"
except Exception as e:
    db.session.rollback()
    return f"{e}"
Run Code Online (Sandbox Code Playgroud)

上面的代码创建了一个对象Company,尝试将其添加到数据库,在异常时回滚事务,

问题就在这里,由于数据是硬编码的,它应该总是返回异常,SQLAlchemy 会引发一个IntegrityError.

对于用户来说,它IntegrityError是如此丑陋且无用,例如:

(sqlite3.IntegrityError) UNIQUE constraint failed: my_table.name [SQL: 'INSERT INTO my_table (name, slug) VALUES (?, ?)'] [parameters: ('Test', 'tests')] (Background on this error at: http://sqlalche.me/e/gkpj)
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来使其美化且用户友好,在此之前我使用db.validates装饰器并检查验证时的重复数据,但这对我来说感觉不对

我最不需要的就是找出哪个字段导致了问题,而无需进行硬编码

python sqlalchemy flask flask-sqlalchemy

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

为什么 Python 在超出实际递归限制之前引发 RecursionError ?

所以我正在尝试使用sys.getrecursionlimit()sys.setrecursionlimit()方法。默认递归限制为3000.

我尝试使用以下代码检查它:

def recursive(n):
    print(n)
    recursive(n+1)
recursive(0)
Run Code Online (Sandbox Code Playgroud)

它确实将数字打印到2979,它会延迟一秒钟,打印2980然后提高RecursionError

RecursionError: maximum recursion depth exceeded while calling a Python object
Run Code Online (Sandbox Code Playgroud)

我知道当它超过sys.getrecursionlimit()返回的递归限制时应该引发错误,但它没有

似乎它总是在递归限制之前执行 20 次

我也试过这个:

sys.setrecursionlimit(100)
def recursive(n):
    print(n)
    recursive(n+1)
recursive(0)
Run Code Online (Sandbox Code Playgroud)

它仍然做同样的事情,将所有数字打印到79,延迟一秒钟,打印80然后引发完全相同的错误

为什么它会在超出我们设置或得到的实际递归限制之前引发错误sys.getrecursionlimit()

python recursion

4
推荐指数
2
解决办法
706
查看次数

MySQL如何进行浮点加法的数学计算?

我使用进行了测试SELECT 0.1 + 0.2;,并使用MySQL(MariaDB)查询,它返回了正确的答案

MariaDB [(none)]> SELECT 0.1 + 0.2;
+-----------+
| 0.1 + 0.2 |
+-----------+
|       0.3 |
+-----------+
1 row in set (0.000 sec)
Run Code Online (Sandbox Code Playgroud)

浮点运算是因为大多数编程语言不准确的IEEE 754作为解释在这里

MySQL的浮点计算如何使其返回正确答案?

mysql sql ieee-754

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

Flask-SQLAlchemy 关系列的总和

我确实有 2 个这样的课程 =>

class User(db.Model):
    __tablename__ = "user"
    user_id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(32), unique=True, nullable=False)
    password = db.Column(db.String(77), unique=False, nullable=False)
    server_limit = db.Column(db.Integer, unique=False, nullable=False, server_default="4")
    servers = db.relationship('Server', backref='owner', lazy='dynamic')

class Server(db.Model):
    __tablename__ = "server"
    server_id = db.Column(db.Integer, primary_key=True)
    server_admin = db.Column(db.Integer, db.ForeignKey("user.user_id"))
    server_port = db.Column(db.Integer, unique=False, nullable=False)
    server_slot = db.Column(db.Integer, unique=False, nullable=False, server_default="32")
Run Code Online (Sandbox Code Playgroud)

现在我试图获取 server_slot 列的总和,例如 user_id 为 1。

我知道对此有已接受的答案,但不同之处在于我尝试使用服务器来做到这一点(db.relationship我在用户类中分配的服务器()来完成此操作。

我用为 User 类创建的替代方法来做到这一点=>

def used(self):
    return db.session.execute("SELECT SUM(server.server_slot) FROM server WHERE server_admin={}".format(self.user_id)).scalar()
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点 …

python sqlalchemy flask flask-sqlalchemy

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

如何直接从 Flask render_template 使用 Jinja2 扩展

我正在开发一个运行良好的 Flask 应用程序,直到我尝试将以下行添加到要渲染的模板中:

{% do totals.update({tier: 0}) %}
Run Code Online (Sandbox Code Playgroud)

当前渲染模板的代码使用 Flask 的render_template()

from flask import Flask, Response, request, session
from flask import render_template
app = Flask(__name__)

..
return render_template(<template.htlm>,...)
Run Code Online (Sandbox Code Playgroud)

此操作失败并出现以下错误:

TemplateSyntaxError: Encountered unknown tag 'do'. Jinja was looking for the following tags: 'endfor' or 'else'. The innermost block that needs to be closed is 'for'.
Run Code Online (Sandbox Code Playgroud)

明显的解决方法是将jinja2.ext.do扩展添加到 jinja。我已经能够直接使用 Jinja2 成功做到这一点,如下所示:

from jinja2 import Environment, PackageLoader
ENV = Environment(loader=PackageLoader('ticket_app', 'templates'), extensions=['jinja2.ext.do'])
...
TEMP = ENV.get_template('div_' + div_id + '.html') …
Run Code Online (Sandbox Code Playgroud)

python jinja2 flask

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

无法在循环内编辑列表项

我正在尝试通过编辑列表来解决问题,该列表可以跟踪学校中已打开和关闭的储物柜,我得到的代码如下:

y = list()
lockers = 100
students = 100
s = 2
i = 0
while i < lockers:
    y.append("O")
    i = i + 1
w = len(y)
while s <= students:
    for x in range(s, w, s):
        if y[x] == "O":
            y[x] = "C"
        if y[x] == "C":
            y[x] = "O"
    s = s + 1
openLockers = y.count("O")
print(openLockers)
Run Code Online (Sandbox Code Playgroud)

代码运行平稳,没有任何错误,但是返回的值为100。我已经对每个变量进行了故障排除,并且都对其进行了修改。我的结论是问题出在线中

y[x] = "C"
Run Code Online (Sandbox Code Playgroud)

y[x] = "C"
Run Code Online (Sandbox Code Playgroud)

这些行之后的列表完全没有变化。

我添加了w以便不在len(y)range函数内部使用,并且我无法使用

for i in y
Run Code Online (Sandbox Code Playgroud)

因为我需要在循环中的项目之间迈出一步y …

python list python-3.x

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

如何在 PostgreSQL 中创建条件外键?

我有下表

create table if not exists pgroup (
    id uuid primary key default gen_random_uuid(),
    label varchar not null,
    is_role boolean default false
);
Run Code Online (Sandbox Code Playgroud)

我想创建一个如下所示的表:

create table if not exists grouprole (
    groupId uuid not null references pgroup(id) `where is_role = false`,
    roleId uuid not null references pgroup(id) `where is_role = true`,
    primary key (groupId, roleId)
);
Run Code Online (Sandbox Code Playgroud)

这个想法是,如果一个是角色而另一个不是,则两个 pgroup 可以处于 grouprole 关系中。

我的目标是在插入时执行检查以确保。

编辑:

我不能在两个不同的表中拆分 pgroup,因为其他表引用它并且不关心 is_role 标志。

sql postgresql

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