我无法让 Python 与 mySQL 一起工作
I can't get Python to work with mySQL
好的,所以我先说 'I am new to Python'。我正在使用 PyCharm 到 运行 我正在构建的这个程序以转储到数据库(本地托管 mySQL)。
不幸的是,我 运行ning 遇到了使用 Python 将数据导入数据库的问题,但我可以通过 phpMyAdmin 在 SQL 运行ning 中插入数据网络图形用户界面。我一定错过了一些明显的东西。我正在为 PyCharm 使用 'mysql.connector' 插件。这是相关的代码。
所以,一开始我导入了模块?像这样;
import mysql.connector
并且这段代码在几个 while 循环中被引用;
cnx = mysql.connector.connect(host ='localhost', user = 'root', passwd= '', db='weather_test01')
c = cnx.cursor()
c.execute("INSERT INTO 'stations' ('dtime', 'tmp', 'apptmp', 'dewpoint', 'relhum', 'delta_t', 'wind_dir', 'wind_spd_kmh', 'wind_gust_kmh', 'wind_spd_kts', 'wind_gust_kts', 'press_qnh', 'press_msl', 'rainsince9am') VALUES (dtime1, tmp1, apptmp1, dewpoint1, relhum1, delta_t1, wind_dir1, wind_spd_kmh1, wind_gust_kmh1, wind_spd_kts1, wind_gust_kts1, press_qnh1, press_msl1, rainsince9am1)")
cnx.commit()
请不要因为我的写作方式而生吃我,我是新手:)
其他重要因素;
- 我能够让它输入数据几次(但它作为 NULL 值进入 SQL。我猜是我传递了错误的数字格式?或者与数据库排序规则?)
- 我也尝试过为 PyCharm 使用许多不同的插件(它们似乎都以类似的方式实现)。
- 我试过在插入的变量名上加引号和不加引号,试了这么多,我已经无计可施了。
至于错误代码,这是目前的样子;
C:\Users\logge\PycharmProjects\untitled3\venv\Scripts\python.exe C:/Users/logge/PycharmProjects/untitled3/main.py
Traceback (most recent call last):
File "C:/Users/logge/PycharmProjects/untitled3/main.py", line 111, in <module>
weather(1)
File "C:/Users/logge/PycharmProjects/untitled3/main.py", line 101, in weather
c.execute("INSERT INTO 'stations' ('dtime', 'tmp', 'apptmp', 'dewpoint', 'relhum', 'delta_t', 'wind_dir', 'wind_spd_kmh', 'wind_gust_kmh', 'wind_spd_kts', 'wind_gust_kts', 'press_qnh', 'press_msl', 'rainsince9am') VALUES (dtime1, tmp1, apptmp1, dewpoint1, relhum1, delta_t1, wind_dir1, wind_spd_kmh1, wind_gust_kmh1, wind_spd_kts1, wind_gust_kts1, press_qnh1, press_msl1, rainsince9am1)")
File "C:\Users\logge\PycharmProjects\untitled3\venv\lib\site-packages\mysql\connector\cursor.py", line 561, in execute
self._handle_result(self._connection.cmd_query(stmt))
File "C:\Users\logge\PycharmProjects\untitled3\venv\lib\site-packages\mysql\connector\connection.py", line 525, in cmd_query
result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
File "C:\Users\logge\PycharmProjects\untitled3\venv\lib\site-packages\mysql\connector\connection.py", line 427, in _handle_result
raise errors.get_exception(packet)
mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''stations' ('dtime', 'tmp', 'apptmp', 'dewpoint', 'relhum', 'delta_t', 'wind_dir' at line 1
Process finished with exit code 1
错误代码中提到的 'line 101' 是指我 post 编辑的代码第二部分中以 'c.execute... INSERT' 开头的行。
这是我也试过的代码,只是为了看看我是否能得到任何结果(尽管我仍然得到同样的错误):
from __future__ import print_function
from datetime import date, datetime, timedelta
import mysql.connector
dtime1 = 1
tmp1 = 5
apptmp1 = 2
dewpoint1 = 64
relhum1 = 3
delta_t1 = 4
wind_dir1 = 5
wind_spd_kmh1 = 6
wind_gust_kmh1 = 7
wind_spd_kts1 = 8
wind_gust_kts1 = 9
press_qnh1 = 10
press_msl1 = 11
rainsince9am1 =12
cnx = mysql.connector.connect(host ='localhost', user = 'root', passwd= '', db='weather_test01')
cursor = cnx.cursor()
tomorrow = datetime.now().date() + timedelta(days=1)
add_employee = ("INSERT INTO stations "
"(dtime, tmp, apptmp, dewpoint, relhum, delta_t, wind_dir, wind_spd_kmh, wind_gust_kmh, wind_spd_kts, wind_gust_kts, press_qnh, press_msl, rainsince9am) "
"VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,)")
data_employee = (dtime1, tmp1, apptmp1, dewpoint1, relhum1, delta_t1, wind_dir1, wind_spd_kmh1, wind_gust_kmh1, wind_spd_kts1, wind_gust_kts1, press_qnh1, press_msl1, rainsince9am1)
# Insert new employee
cursor.execute(add_employee, data_employee)
emp_no = cursor.lastrowid
# Make sure data is committed to the database
cnx.commit()
cursor.close()
cnx.close()
如有任何帮助或建议,我们将不胜感激。如果需要,我也很乐意 post 整个代码。我只是不想把这整件事搞得一团糟。
我发现了你的错误。您已将输入数据引用为字符串 (%s)。但是你输入的是整数(数字)。
如果你想把数字作为字符串,在第一段代码(你的)中,你需要输入 str(variable)
而不仅仅是 variable
。在第二段代码中(从 MySQL 复制),您可以将变量声明为带引号的 variable = "0000"
。
如果您想在代码中使用数字,请将 table 结构更改为 INTEGER
或 DOUBLE
而不是 VARCHAR
或 CHAR
.
我假设 table 存在并且所有字段都存在,因为连接到数据库并找到 table.
没有错误
好的,所以我先说 'I am new to Python'。我正在使用 PyCharm 到 运行 我正在构建的这个程序以转储到数据库(本地托管 mySQL)。
不幸的是,我 运行ning 遇到了使用 Python 将数据导入数据库的问题,但我可以通过 phpMyAdmin 在 SQL 运行ning 中插入数据网络图形用户界面。我一定错过了一些明显的东西。我正在为 PyCharm 使用 'mysql.connector' 插件。这是相关的代码。
所以,一开始我导入了模块?像这样;
import mysql.connector
并且这段代码在几个 while 循环中被引用;
cnx = mysql.connector.connect(host ='localhost', user = 'root', passwd= '', db='weather_test01')
c = cnx.cursor()
c.execute("INSERT INTO 'stations' ('dtime', 'tmp', 'apptmp', 'dewpoint', 'relhum', 'delta_t', 'wind_dir', 'wind_spd_kmh', 'wind_gust_kmh', 'wind_spd_kts', 'wind_gust_kts', 'press_qnh', 'press_msl', 'rainsince9am') VALUES (dtime1, tmp1, apptmp1, dewpoint1, relhum1, delta_t1, wind_dir1, wind_spd_kmh1, wind_gust_kmh1, wind_spd_kts1, wind_gust_kts1, press_qnh1, press_msl1, rainsince9am1)")
cnx.commit()
请不要因为我的写作方式而生吃我,我是新手:)
其他重要因素;
- 我能够让它输入数据几次(但它作为 NULL 值进入 SQL。我猜是我传递了错误的数字格式?或者与数据库排序规则?)
- 我也尝试过为 PyCharm 使用许多不同的插件(它们似乎都以类似的方式实现)。
- 我试过在插入的变量名上加引号和不加引号,试了这么多,我已经无计可施了。
至于错误代码,这是目前的样子;
C:\Users\logge\PycharmProjects\untitled3\venv\Scripts\python.exe C:/Users/logge/PycharmProjects/untitled3/main.py
Traceback (most recent call last):
File "C:/Users/logge/PycharmProjects/untitled3/main.py", line 111, in <module>
weather(1)
File "C:/Users/logge/PycharmProjects/untitled3/main.py", line 101, in weather
c.execute("INSERT INTO 'stations' ('dtime', 'tmp', 'apptmp', 'dewpoint', 'relhum', 'delta_t', 'wind_dir', 'wind_spd_kmh', 'wind_gust_kmh', 'wind_spd_kts', 'wind_gust_kts', 'press_qnh', 'press_msl', 'rainsince9am') VALUES (dtime1, tmp1, apptmp1, dewpoint1, relhum1, delta_t1, wind_dir1, wind_spd_kmh1, wind_gust_kmh1, wind_spd_kts1, wind_gust_kts1, press_qnh1, press_msl1, rainsince9am1)")
File "C:\Users\logge\PycharmProjects\untitled3\venv\lib\site-packages\mysql\connector\cursor.py", line 561, in execute
self._handle_result(self._connection.cmd_query(stmt))
File "C:\Users\logge\PycharmProjects\untitled3\venv\lib\site-packages\mysql\connector\connection.py", line 525, in cmd_query
result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
File "C:\Users\logge\PycharmProjects\untitled3\venv\lib\site-packages\mysql\connector\connection.py", line 427, in _handle_result
raise errors.get_exception(packet)
mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''stations' ('dtime', 'tmp', 'apptmp', 'dewpoint', 'relhum', 'delta_t', 'wind_dir' at line 1
Process finished with exit code 1
错误代码中提到的 'line 101' 是指我 post 编辑的代码第二部分中以 'c.execute... INSERT' 开头的行。
这是我也试过的代码,只是为了看看我是否能得到任何结果(尽管我仍然得到同样的错误):
from __future__ import print_function
from datetime import date, datetime, timedelta
import mysql.connector
dtime1 = 1
tmp1 = 5
apptmp1 = 2
dewpoint1 = 64
relhum1 = 3
delta_t1 = 4
wind_dir1 = 5
wind_spd_kmh1 = 6
wind_gust_kmh1 = 7
wind_spd_kts1 = 8
wind_gust_kts1 = 9
press_qnh1 = 10
press_msl1 = 11
rainsince9am1 =12
cnx = mysql.connector.connect(host ='localhost', user = 'root', passwd= '', db='weather_test01')
cursor = cnx.cursor()
tomorrow = datetime.now().date() + timedelta(days=1)
add_employee = ("INSERT INTO stations "
"(dtime, tmp, apptmp, dewpoint, relhum, delta_t, wind_dir, wind_spd_kmh, wind_gust_kmh, wind_spd_kts, wind_gust_kts, press_qnh, press_msl, rainsince9am) "
"VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,)")
data_employee = (dtime1, tmp1, apptmp1, dewpoint1, relhum1, delta_t1, wind_dir1, wind_spd_kmh1, wind_gust_kmh1, wind_spd_kts1, wind_gust_kts1, press_qnh1, press_msl1, rainsince9am1)
# Insert new employee
cursor.execute(add_employee, data_employee)
emp_no = cursor.lastrowid
# Make sure data is committed to the database
cnx.commit()
cursor.close()
cnx.close()
如有任何帮助或建议,我们将不胜感激。如果需要,我也很乐意 post 整个代码。我只是不想把这整件事搞得一团糟。
我发现了你的错误。您已将输入数据引用为字符串 (%s)。但是你输入的是整数(数字)。
如果你想把数字作为字符串,在第一段代码(你的)中,你需要输入 str(variable)
而不仅仅是 variable
。在第二段代码中(从 MySQL 复制),您可以将变量声明为带引号的 variable = "0000"
。
如果您想在代码中使用数字,请将 table 结构更改为 INTEGER
或 DOUBLE
而不是 VARCHAR
或 CHAR
.
我假设 table 存在并且所有字段都存在,因为连接到数据库并找到 table.
没有错误