2 个问题:将数据从 MySQL 数据库导入到 Python

2 questions: Importing data from MySQL data base to Python

Q1。我的数据库包含3列:时间,值A和值B。时间数据以00:00:00的形式写入,增量为1分钟。 当我尝试导入数据时... cursor.execute (fSELECT * 来自 trffc_int_data.{i};") 而不是得到 (00:00:00, A, B),我得到 (datetime.timedelta(0), 7, 2), (datetime.timedelta(秒=60), 8, 5), .....

我想 Python 没有正确转换时间。有什么建议吗?

Q2。我有一个包含上述数据的初始数据库。我需要从初始数据库中获取数据,将其转换并保存到另一个数据库中。 我被困在应该将数据保存到新 table 的位置。 以下是代码部分...

# Creating new DB
NewDB = input(" :: Enter the Database name : ")
sqlsynt = f"CREATE DATABASE IF NOT EXISTS {NewDB}"
cursor.execute(sqlsynt,NewDB)                 
stdb.commit()

# Creating table and writing the data
cursor.execute (f"USE {NewDB}")
sqlsynt = f"CREATE TABLE {dayinweek} (time TIME, Vehicles INT(3), Pedestrians INT(3))"
cursor.execute (sqlsynt, NewDB, dayinweek) 
#stdb.commit()
sqlsyntax = f"INSERT INTO {NewDB}.{dayinweek} (time, Vehicles, Pedestrians) VALUES (%s, %s, %s)"           
cursor.executemany(sqlsyntax, temp_list_day)

程序卡在最后一行说NewDB中没有table1!

mysql.connector.errors.ProgrammingError: 1146 (42S02): Table 'test001.1' doesn't exist

代码有什么问题?也许问题在于混合 f 和 %s 格式?

提前致谢

如果我没听错,您正在创建一个名为 1 的 table。 MySQL 中不允许使用纯数字标识符,除非标识符被引用,如 in the documentation.

所述

Identifiers may begin with a digit but unless quoted may not consist solely of digits.

您的 create table 语句确实失败了,但您直到尝试 insert.

才注意到该错误

可以引用table名称,使用反引号:

CREATE TABLE `{dayinweek}` (time TIME, Vehicles INT(3), Pedestrians INT(3))

然后:

INSERT INTO `{NewDB}`.`{dayinweek}` (time, Vehicles, Pedestrians) VALUES (%s, %s, %s)

引用数据库名称也可能是个好主意:适用于 table 名称的相同规则(这是用户输入的开头)。

但总的来说,更改 table 名称似乎是一个更好的选择,因为这可以使代码更清晰:例如 table1 之类的名称如何 - 或者更好的是 table 更能表达其包含的数据类型的名称,例如 customer1sales1.

注意:您的代码 对 SQL 注入开放 ,因为您在 create database 语句中将用户输入直接传递到数据库。显然,此类信息无法参数化,但我仍然建议事先在应用程序端执行最少的健全性检查。