簡體   English   中英

斷言錯誤:運行 SQL 查詢時出現問題

[英]ASSERTION ERROR: Issue in running SQL query

問題#1

列出所有在閏年執導過“喜劇”電影的導演。 (您需要檢查類型是否為“喜劇”且年份是否為閏年)您的查詢應返回導演姓名、電影名稱和年份。

%%time
def grader_1(q1):
    q1_results  = pd.read_sql_query(q1,conn)
    print(q1_results.head(10))
    assert (q1_results.shape == (232,3))

    #m as movie , m_director as md,Genre as g,Person as p
    query1 ="""SELECT m.Title,p.Name,m.year
    FROM Movie m JOIN 
         M_director d
         ON m.MID = d.MID JOIN 
         Person p
         ON d.PID = p.PID JOIN
         M_Genre mg
         ON m.MID = mg.MID JOIN
         Genre g 
         ON g.GID = mg.GID
         WHERE g.Name LIKE '%Comedy%'
    AND ( m.year%4 = 0
    AND m.year % 100 <> 0
    OR  m.year % 400 = 0 ) LIMIT 2"""
    grader_1(query1)

錯誤:

                               title           Name  year
0                         Mastizaade   Milap Zaveri  2016
1  Harold & Kumar Go to White Castle   Danny Leiner  2004

---------------------------------------------------------------------------

AssertionError                            Traceback (most recent call last)

<ipython-input-17-a942fcc98f72> in <module>()
----> 1 get_ipython().run_cell_magic('time', '', 'def grader_1(q1):\n    q1_results  = pd.read_sql_query(q1,conn)\n    print(q1_results.head(10))\n    assert (q1_results.shape == (232,3))\n\n#m as movie , m_director as md,Genre as g,Person as p\nquery1 ="""SELECT m.Title,p.Name,m.year\nFROM Movie m JOIN \n     M_director d\n     ON m.MID = d.MID JOIN \n     Person p\n     ON d.PID = p.PID JOIN\n     M_Genre mg\n     ON m.MID = mg.MID JOIN\n     Genre g \n     ON g.GID = mg.GID\n     WHERE g.Name LIKE \'%Comedy%\'\nAND ( m.year%4 = 0\nAND m.year % 100 <> 0\nOR  m.year % 400 = 0 ) LIMIT 2"""\ngrader_1(query1)')

2 frames

<decorator-gen-53> in time(self, line, cell, local_ns)

/usr/local/lib/python3.7/dist-packages/IPython/core/magics/execution.py in time(self, line, cell, local_ns)
   1191         else:
   1192             st = clock2()
-> 1193             exec(code, glob, local_ns)
   1194             end = clock2()
   1195             out = None

<timed exec> in <module>()

<timed exec> in grader_1(q1)

AssertionError: 

我已經在沒有 grad_1 function 的 IMDB 數據集上運行了這個 SQL 查詢,我能夠運行這個查詢。 但是,當我嘗試在 Grader_1 function 中運行時。我收到斷言錯誤。

我怎樣才能解決這個問題?

您的查詢有一個 LIMIT 子句,它會阻止 SQL 引擎獲取所有數據。 沒有這個子句就再次運行它。

query1 = """ SELECT M.title,Pe.Name,M.year FROM Movie M JOIN M_Director MD              ON M.MID = MD.MID JOIN M_Genre MG ON M.MID = MG.MID JOIN Genre Ge ON MG.GID = Ge.GID JOIN Person Pe ON MD.PID = Pe.PID WHERE Ge.Name LIKE '%Comedy%' AND CAST(SUBSTR(TRIM(M.year),-4) AS INTEGER) % 4 = 0 AND (CAST(SUBSTR(TRIM(M.year),-4) AS INTEGER) % 100 <> 0 OR CAST(SUBSTR(TRIM(M.year),-4) AS INTEGER) % 400 = 0)                       """
                           

運行此查詢即可解決所有問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM