如何解决mysql.connector.errors.ProgrammingError: 1054 (42S22): 'where 子句'中的未知列
有一个函数 get_show_listing
查询 MysqL 数据库并根据传递的参数(或缺少)过滤集合。在对传递参数的情况进行单元测试时,会引发以下错误。我想了解导致此错误的原因;尤其是传递给函数的任何参数。
MysqL.connector.errors.ProgrammingError: 1054 (42S22): UnkNown column 'Action' in 'where clause'
def db_connect(func):
def wrapper_db_connect(*args,**kwargs):
with MysqL.connector.connect(**credentials) as db_connection:
cursor = db_connection.cursor(dictionary=True)
return func(cursor,*args,**kwargs)
return wrapper_db_connect
@db_connect
def get_show_listing(cursor,genre=None):
if not genre:
cursor.execute("""
SELECT t.title,t.view_rating,YEAR(t.release_date),t.score,t.Votes,g.name
FROM tvshow AS t LEFT JOIN show_genre as s
ON t.title = s.tvshow_title RIGHT JOIN genre as g
ON s.genre_name = g.name ORDER BY Votes DESC LIMIT 5;
""")
else:
cursor.execute(f"""
SELECT t.title,g.name
FROM tvshow AS t LEFT JOIN show_genre as s
ON t.title = s.tvshow_title RIGHT JOIN genre as g
ON s.genre_name = g.name WHERE g.name = {genre}
ORDER BY Votes DESC LIMIT 5;
""")
return cursor.fetchall()
class TestShowListing(unittest.TestCase):
@patch.dict('main.credentials',test_db_config)
def test_db_query_show_listing_with_genre(self):
shows = get_show_listing(genre="Action")
self.assertTrue(all(
shows[i]['Votes'] > shows[i + 1]['Votes'] and show[i]['Votes']
for i in range(len(shows) - 1)
))
genre_table = """
CREATE TABLE IF NOT EXISTS genre (
name VARCHAR(20) PRIMARY KEY
);
"""
show_table = """
CREATE TABLE IF NOT EXISTS tvshow (
title VARCHAR(20) NOT NULL,view_rating VARCHAR(8),release_date DATE,summary TEXT,score DECIMAL(2,1),Votes INT,PRIMARY KEY(title)
);
"""
show_genre_table = """
CREATE TABLE IF NOT EXISTS show_genre (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,genre_name VARCHAR(20) NULL,tvshow_title VARCHAR(20) NOT NULL,FOREIGN KEY (genre_name) REFERENCES genre(name),FOREIGN KEY (tvshow_title) REFERENCES tvshow(title)
);
"""
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。