DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(event_id SERIAL PRIMARY KEY
,name VARCHAR(12) NOT NULL
,start_dt DATETIME NOT NULL
,end_dt DATETIME NULL
);
INSERT INTO my_table VALUES
(1, 'Carnival', '2018-04-30 12:00:00','2018-04-30 12:00:00'+INTERVAL 150 MINUTE),
(2, 'Fairytale','2018-04-30 20:00:00','2018-04-30 20:00:00'+INTERVAL 200 MINUTE);
SELECT * FROM my_table;
+----------+-----------+---------------------+---------------------+
| event_id | name | start_dt | end_dt |
+----------+-----------+---------------------+---------------------+
| 1 | Carnival | 2018-04-30 12:00:00 | 2018-04-30 14:30:00 |
| 2 | Fairytale | 2018-04-30 20:00:00 | 2018-04-30 23:20:00 |
+----------+-----------+---------------------+---------------------+
INSERT INTO my_table (name,start_dt,end_dt)
SELECT 'Whatever','2018-04-20 11:58:00','2018-04-30 13:00'
FROM (SELECT 1) x
LEFT
JOIN my_table y
ON y.end_dt > '2018-04-30 11:58:00'
AND y.start_dt < '2018-04-30 13:00:00'
WHERE y.event_id IS NULL;
SELECT * FROM my_table;
+----------+-----------+---------------------+---------------------+
| event_id | name | start_dt | end_dt |
+----------+-----------+---------------------+---------------------+
| 1 | Carnival | 2018-04-30 12:00:00 | 2018-04-30 14:30:00 |
| 2 | Fairytale | 2018-04-30 20:00:00 | 2018-04-30 23:20:00 |
+----------+-----------+---------------------+---------------------+
Вы можете сделать это с помощью функции вместо переменной.
def y(x):
return x + 10
Таким образом, print(y(x))
выдаст текущее значение x
плюс десять.
Однако нет способа сделать это только с переменной . Переменные только изменяют свое значение, когда вы явно указываете им.
Единственный способ, которым я знаю это сделать в стандартной библиотеке Python, - использовать свойство, так что соответствующее значение вычисляется каждый раз, когда к нему обращаются:
class Thing(object):
def __init__(self, x, y_add):
self.x = x
self.y_add = y_add
@property
def y(self):
return self.x + self.y_add
In use:
>>> t = Thing(2, 10)
>>> t.x
2
>>> t.y
12
>>> t.x = 3
>>> t.y
13
В противном случае вам нужно будет вызвать функцию (y()
вместо y
) или использовать что-то вроде sympy
.
Переменные в Python неизменяемы, что означает, что они не изменяются со временем или не могут быть изменены, если не будут упомянуты что-то другое. Другими словами, использование доступных типов данных невозможно. Существует причина, по которой Python - это увеличение скорости и выразительности. Вероятно, есть способ реализовать то, что вы хотите сделать, без изменяемого типа данных.
Если вы настаиваете на использовании изменяемого типа данных, есть языки, которые разрешают это, и может быть импортируемый модуль или определение класса который позволяет это, но он очень непитонический.
См.: https://mail.python.org/pipermail/tutor/2000-August/001976.html