通过Python将值插入MySQL数据库的语法错误

acruukt9  于 2023-03-11  发布在  Mysql
关注(0)|答案(1)|浏览(109)

我尝试将API中的值插入mysql数据库,但在尝试插入值时遇到错误
SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,了解在第2行的'INSERT INTO DynamicBikeData(AvailableBike,Capacity,Status,Location)VALUES(31'附近使用的正确语法
我已经包含了下面的代码,我已经尝试了多种方式格式化sql语句,但错误没有改变

import mysql.connector
import requests
import json

#Connect to MySQLServer
mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  password="*********"
)

#Create DB if not already exists
mycursor = mydb.cursor()
try:
    mycursor.execute("CREATE DATABASE comp30830project")
    mycursor.execute("use comp30830project; CREATE TABLE DynamicBikeData (AvailableBike INT, Capacity INT, Status VARCHAR(255),Location VARCHAR(255))")
except:
    print("DataBase already exists")

#Dublin Bikes Data Pull
r = requests.get("https://api.jcdecaux.com/vls/v1/stations",
params={"apiKey":'**************',
"contract": "dublin"})
(json.loads(r.text))

response = requests.get("https://api.jcdecaux.com/vls/v1/stations/42?apiKey=***********")
data = response.text
BikeData = json.loads(data)

for i in range(1,43):
    response = requests.get(f"https://api.jcdecaux.com/vls/v1/stations/{i}?apiKey=****************&contract=dublin")
    data = response.text
    data = json.loads(data)
    availableBikes = data['available_bikes']
    location = f"{data['position']['lat']}{data['position']['lng']}"
    capacity = data['bike_stands']
    status = data['status']

    sql = f"""
    USE comp30830project 
    INSERT INTO DynamicBikeData (AvailableBike, Capacity, Status, Location) VALUES ({availableBikes},{capacity},{status},{location});"""

    mycursor.execute(sql)
    mydb.commit()

编辑:我还尝试了第二种格式化sql的方法,仍然产生这个结果
数据库已存在Traceback(最近调用最后):文件“/库/框架/Python.framework/版本/3.10/库/Python 3.10/站点包/mysql/连接器/连接_cext.py”,第608行,在cmd_query self._cmysql.query(_mysql_connector. MySQL接口错误:SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,了解在第2行的'INSERT INTO DynamicBikeData(AvailableBike,Capacity,Status,Location)VALUES('附近使用的正确语法
上述异常是以下异常的直接原因:
追溯(最近调用最后调用):文件“/用户/eoin/桌面/COMP 30830项目/CreateDBandAddData.py“,第45行,在我的光标中。执行(sql,值)文件“/库/框架/Python.framework/版本/3.10/库/Python 3.10/站点包/mysql/连接器/游标_cext.py”,第330行,执行中结果= self._cnx.cmd_query(文件“/库/框架/Python.framework/版本/3.10/库/Python 3.10/站点包/mysql/连接器/连接_cext.py”,第616行,在cmd_query中引发get_mysql_exception(mysql.连接器.错误.编程错误:1064(42000):SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,了解在第2行的'INSERT INTO DynamicBikeData(AvailableBike,Capacity,Status,Location)VALUES('附近使用的正确语法

yjghlzjz

yjghlzjz1#

不要使用f字符串,尝试像这样插入数据,

sql = """
USE comp30830project 
INSERT INTO DynamicBikeData (AvailableBike, Capacity, Status, Location) VALUES (%s,%s,%s,%s);"""
values = (availableBikes, capacity, status, location)
mycursor.execute(sql,values)

这应该有助于避免任何错误。如果你仍然面临同样的错误,请提供一个详细的日志,并检查是否所有的变量返回的API有它的值!

相关问题