我刚刚为日期数据创建了数据类型,该数据类型返回一个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) 我目前正在尝试获得... \hlineGNU Common lisp 2.49 的输出,但我无法使格式工作.这是我到目前为止尝试获得一个反斜杠:
(format nil "\ ") => " "
(format nil "\\ ") => "\\ "
(format nil "\\\ ") => "\\ "
Run Code Online (Sandbox Code Playgroud)
我认为双反斜杠会使它工作,为什么反斜杠不会逃避另一个反斜杠?
我有一个这样的模型:
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装饰器并检查验证时的重复数据,但这对我来说感觉不对
我最不需要的就是找出哪个字段导致了问题,而无需进行硬编码
所以我正在尝试使用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()?
我使用进行了测试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的浮点计算如何使其返回正确答案?
我确实有 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)
我怎样才能做到这一点 …
我正在开发一个运行良好的 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) 我正在尝试通过编辑列表来解决问题,该列表可以跟踪学校中已打开和关闭的储物柜,我得到的代码如下:
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 …
我有下表
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 标志。
python ×6
flask ×3
sql ×2
sqlalchemy ×2
common-lisp ×1
datetime ×1
ieee-754 ×1
jinja2 ×1
lisp ×1
list ×1
mysql ×1
postgresql ×1
python-3.6 ×1
python-3.7 ×1
python-3.x ×1
recursion ×1