小编agi*_*iap的帖子

MySQL十进制类型超出范围错误

这段代码:

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

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

优化 Python MySQL/连接器速度

我在 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)

python mysql csv pandas

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

更新类的属性时清除某些方法的 lru_cache?

我有一个带有 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 时有没有办法清除缓存?

谢谢!

python synchronization caching lru functools

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

标签 统计

mysql ×2

python ×2

caching ×1

csv ×1

functools ×1

lru ×1

pandas ×1

synchronization ×1