【问题标题】:2 questions: Importing data from MySQL data base to Python2个问题:将数据从MySQL数据库导入Python
【发布时间】:2021-03-29 23:52:55
【问题描述】:

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

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

第二季度。我有一个包含上述数据的初始数据库。我需要从初始数据库中获取数据,对其进行转换,然后将其保存到另一个数据库中。 我被困在应该将数据保存到新表中的地步。 以下是部分代码...

# 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中没有表1!

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

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

提前致谢

【问题讨论】:

    标签: python mysql sql sql-insert create-table


    【解决方案1】:

    如果我正确地遵循了这一点,那么您正在创建一个名为 1 的表。 MySQL 中不允许使用仅数字标识符,除非标识符被引用,如 in the documentation 所述。

    标识符可以以数字开头,但除非被引用,否则标识符可能不完全由数字组成。

    您的create table 语句确实失败了,但直到您尝试insert 时您才注意到该错误。

    可以引用表名,使用反引号:

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

    然后:

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

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

    但总的来说,更改表名似乎是一个更好的选择,因为这样可以使代码更简洁:例如table1 之类的东西怎么样 - 或者更好的是,表名更能表达它的数据类型包含,例如 customer1sales1

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

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 2011-08-30
      • 2020-05-01
      • 1970-01-01
      • 2017-08-08
      • 2015-05-21
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多