这段代码:
DROP DATABASE IF EXISTS `my_db`;
CREATE DATABASE `my_db`;
CREATE TABLE `my_db`.`my_table` (
`id` integer NOT NULL AUTO_INCREMENT,
`multiplier` decimal(18, 10) NOT NULL,
PRIMARY KEY (`id`)
) Engine=InnoDB;
INSERT INTO `my_db`.`my_table` (`multiplier`) VALUES (100000000.0);
Run Code Online (Sandbox Code Playgroud)
返回错误:
Error Code: 1264. Out of range value for column 'multiplier' at row 1
Run Code Online (Sandbox Code Playgroud)
为什么?逗号之前只有9位数字,而列应该工作到18位数 - 或者我在这里遗漏了什么?谢谢.
我在 MySQL 中有一个表,其中包含以下列:
id int(11)
contract_id int(11)
datetime datetime
open decimal(18, 10)
high decimal(18, 10)
low decimal(18, 10)
close decimal(18, 10)
Run Code Online (Sandbox Code Playgroud)
该表相当大(> 3 亿行),但在数据库中进行的查询即使返回 300,000 行,也会在半秒内执行。但是,当我从 Python 检索数据时,它非常慢(相同的请求从 MySQL Workbench 中的 0.5 秒变为 Python 中的 34 秒):
import pandas as pd
import mysql.connector
con = mysql.connector.connect(**CONFIG)
cur = con.cursor()
def get_data1():
df = pd.read_sql(
"""
SELECT datetime, open, high, low, close
FROM prices
WHERE contract_id = 1
AND datetime >= '2015-01-01 09:00:00'
AND datetime <= '2015-10-15 16:00:00';
""", con)
return …Run Code Online (Sandbox Code Playgroud) 我有一个带有 method/property 的对象multiplier。这个方法在我的程序中被调用了很多次,所以我决定使用lru_cache()它来提高执行速度。正如预期的那样,它要快得多:
以下代码显示了问题:
from functools import lru_cache
class MyClass(object):
def __init__(self):
self.current_contract = 201706
self.futures = {201706: {'multiplier': 1000},
201712: {'multiplier': 25}}
@property
@lru_cache()
def multiplier(self):
return self.futures[self.current_contract]['multiplier']
CF = MyClass()
assert CF.multiplier == 1000
CF.current_contract = 201712
assert CF.multiplier == 25
Run Code Online (Sandbox Code Playgroud)
第二个assert失败,因为缓存值为 1000,因为lru_cache()不知道底层属性current_contract已更改。
更新 self.current_contract 时有没有办法清除缓存?
谢谢!