You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spotify API提取数据存入MySQL时报表不存在错误,求解决方案

问题原因

你代码里先执行了DROP TABLE IF EXISTS spotify_api.spotify;,这行代码会直接删掉spotify_api库下的spotify表,但删掉之后你完全没重新创建这个表——哪怕之前手动建过表,每次运行代码都会把表删干净,后续插入数据自然会提示表不存在。

另外还有两个潜在问题:

  • 直接拼接SQL语句会触发SQL注入风险,如果歌曲名里包含单引号(比如Don't Stop),还会直接导致SQL语法错误。
  • 要确认手动创建的tracks和items列数据类型匹配:tracks存序号(整数)需设为INT类型,items存歌曲名需设为VARCHAR(255)或更长的字符串类型。

修正方案

方案1:保留手动创建的表

如果想保留之前手动建好的spotify表,直接删掉代码里的DROP TABLE那一行即可,这样每次运行代码不会删除已有表,直接插入数据。

方案2:自动创建表(推荐)

让代码自动处理表的创建,避免手动操作的麻烦,同时改用参数化查询规避SQL风险:

修正后的完整代码:

import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
import mysql.connector

# 连接数据库(已指定库,后续操作无需重复写库名前缀)
mydb = mysql.connector.connect(
    host="localhost",
    user="root",
    password="你的数据库密码",
    database="spotify_api"
)

mycursor = mydb.cursor()

# 可选:每次运行清空旧表数据(不需要的话可以删掉这行)
mycursor.execute('DROP TABLE IF EXISTS spotify;')
# 自动创建表,定义匹配的列类型
mycursor.execute('''
CREATE TABLE spotify (
    tracks INT,
    items VARCHAR(255)
)
''')

# 连接Spotify API
sp = spotipy.Spotify(auth_manager=SpotifyClientCredentials(
    client_id="你的Spotify Client ID",
    client_secret="你的Spotify Client Secret"
))

results = sp.search(q='sza', limit=20)

# 使用参数化查询插入数据,避免SQL注入和语法错误
for idx, track in enumerate(results['tracks']['items']):
    print(idx, track['name'])
    sql = "INSERT INTO spotify (tracks, items) VALUES (%s, %s)"
    val = (idx, track['name'])
    mycursor.execute(sql, val)

mydb.commit()
print(mycursor.rowcount, "条记录已插入。")

# 查询验证结果
mycursor.execute("SELECT * FROM spotify;")
myresult = mycursor.fetchall()
for x in myresult:
    print(x)

# 关闭资源
mycursor.close()
mydb.close()

关键说明

  • 因为连接数据库时已经指定了database="spotify_api",后续操作表直接写表名spotify即可,无需再加spotify_api.前缀。
  • 参数化查询用%s作为占位符,参数放在元组里传给execute方法,这是Python操作MySQL的标准写法,能彻底避免字符串拼接带来的问题。
  • 最后记得关闭数据库连接,避免资源泄漏。

内容的提问来源于stack exchange,提问作者anon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:20:31