【发布时间】:2016-11-24 11:56:32
【问题描述】:
我在使用 python 更新 mysql 数据库中的记录时遇到了一个奇怪的问题。也就是说,错误1046是由python组抛出的,但是同样的mysql语句在mysql workbench中运行得很好。
这里是mysql语句,
UPDATE r resultant_data d
INNER JOIN
(SELECT
uid,
SUBSTRING_INDEX(GROUP_CONCAT(login_type
ORDER BY device_ct DESC), ',', 1) devices
FROM
(SELECT
uid, login_type, COUNT(*) AS device_ct
FROM
login_record l
WHERE
l.ctime > 1451577600
AND l.ctime < 1454256000
GROUP BY uid , login_type
ORDER BY device_ct DESC) a
GROUP BY uid) ct ON d.uid = ct.uid AND d.month_id = 1
SET
d.device = ct.devices
;
我的任务是根据login_record表将一个用户一个月内最常用的登录设备更新到表resultant_data中。所以第一步(最里面的查询):创建一个展示 uid、login_device、登录时间(即 device_ct)的表。第二步(最里面的第二个查询):根据device_ct,找出与最多device_ct关联的uid和login_type。第三步(更新层):匹配uid并将记录更新为resultant_data。
那么问题出在 python 上吗?还是mysql语句?我怀疑问题是由于“inner join”命令引起的(尽管它在 mysql workbench_ 中运行良好。我之前也有类似的问题,我通过将“inner join”重写为“where uid in (select ....)”解决了这个问题.但是对于这个任务,有没有办法重写或重组语句?
非常感谢。
【问题讨论】:
-
通常您在工作台中建立了一个默认数据库。所以,用你的 python 连接,建立一个,或者做一个
use myDatabaseName; -
您是否在连接字符串中指定了数据库?
标签: python mysql database error-handling mysql-workbench