【问题标题】:Error (1046, 'No database selected') happened in Python program, but not in mysql workbench错误(1046,'未选择数据库')发生在 Python 程序中,但不在 mysql 工作台中
【发布时间】: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


【解决方案1】:

我不认为你的问题是你的 SQL。确保在 python 中建立数据库连接时,包含表所在的数据库,即模式名称:

db_connection = mysql.connector.connect(
    host="192.168.1.101",
    user="myusername",
    passwd="mypassword",
    database="database_table_lives_in"
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-09
    • 2011-10-16
    • 2017-02-05
    • 2015-04-29
    • 2016-03-24
    • 2012-07-11
    相关资源
    最近更新 更多