python - 将 MySQL 查询转换为 SQLalchemy 查询

标签 python mysql sql sqlalchemy

我正在尝试从使用简单 BASH 脚本运行的服务器移植所有原始 SQL 脚本,以便我可以使用 python 和 sqlalchemy 处理数据,但下面的这个脚本拒绝移植。我还在下面列出了我复制它的最接近的尝试。

如果有人对我的错误有任何想法,或者您可以复制它,请随意。

另请注意,某些表已被替换为填充名称。

-----MYSQL-----

SELECT *
FROM
(SELECT CONCAT('{URL}', TBL1.ColumID) AS 'Link',
    TBL1.ColumID AS CaseID,
    TBL1.ColumType AS 'Abuse Type',
    TBL1.Status AS 'Status',
    TBL1.Role AS 'Queue', TBL1.CreationDate, TBL1.LastUpdated, @LAST_TOUCHED:=
    (SELECT from_unixtime((max(unix_timestamp(LAST_UPDATED))))
        FROM TBL2
        WHERE TBL1.ColumID = CaseID
        AND (NOTE_TYPE = 'communication'
            OR NOTE_SUBTYPE IS NULL)) AS last_touched, ((unix_timestamp(now()) - unix_timestamp(LAST_UPDATED))/3600/24) AS Age,
    CASE
    WHEN isnull(@LAST_TOUCHED) THEN 'N'
    ELSE 'Y'
    END AS Touched
    FROM TBL1
    WHERE TBL1.ROLE REGEXP '{ROLE Filler}'
    AND STATUS REGEXP 'RESOLVED|DELETED' =0) AS tbl
WHERE tbl.Age > 2
order by tbl.Age desc

------失败的Python代码-----

query = select([
        TBL1.c.caseid.label('CaseID'),
        TBL1.c.casetype.label('Type'),
        TBL1.c.STATUS.label('Status'),
        TBL1.c.ROLE.label('Queue'),
        TBL1.c.CREATION_DATE,
        TBL1.c.LAST_UPDATED,
        (func.from_unixtime(
            func.max(
                func.unix_timestamp(
                    TBL2.c.LAST_UPDATED))).filter(
        TBL2.c.caseid == TBL1.c.caseid).filter(
        (TBL2.c.NOTE_TYPE == '{notetype}') | 
        (TBL2.c.NOTE_SUBTYPE == None)).label("LAST_TOUCHED")
        )]).where(
        (TBL1.c.ROLE == '{rolename}') &
        (TBL1.c.STATUS != 'RESOLVED') |
        (TBL1.c.STATUS != 'DELETED'))

最佳答案

首先,仔细检查您是否确实必须这样做。您这样做是为了将查询包含在网络服务器中,还是为了提取数据进行分析?如果是后者,只需使用pandas:

import pandas as pd
import sqlalchemy as sa

engine = sa.create_engine('{connection string}')
df = pd.read_sql_query("{insert your complicated query here}", engine)

关于python - 将 MySQL 查询转换为 SQLalchemy 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45034666/

相关文章:

python - 显示 Qwidget 窗口而不显示 MainWindow

python - 如何使用 PyEphem 计算给定银河坐标(GLON,GLAT)的(alt,az)?

MySQL long_query_time 值

sql - 需要在 SQL 查询中替换 union

php - 如何获取具有给定日期值的 varchar 日期列

sql - 这个 SQL 语句背后的含义是什么? ISNULL(状态,0) & 128 = 0?

python - 如何在 Windows 10 上使用 OpenCV Python 写入 AVI

python - 如何在 Django 中构建电子商务购物车?

mysql - 如何在 Codeigniter 中编写此子查询 Select AVG with Limit

mysql - 用mysql连接5个表