【问题标题】:Python convert string to objectPython将字符串转换为对象
【发布时间】:2021-08-03 06:46:30
【问题描述】:

我正在使用 pandas/sql alchemy 将表写入 sql 数据库。

下面是一些示例代码:

df.to_sql('table', connection, schema=None, dtype={
    'id': sa.types.VARCHAR(length=100),
    'value1': sa.types.Float(),
    'value2': sa.types.Float()})

我有一个 csv 文件,其中定义了每列的数据类型,我希望能够使用 pandas 读取 csv 文件,然后将表转换为字典,该字典将传递给 to_sql() 方法。

如果我直接执行此操作,则数据类型(例如 sa.types.VARCHAR(length=100))将显示为字符串。如何转换此字符串,以便将其作为适当的数据类型传递。

为了澄清我是否从 csv 表中读取数据,dtype 字典将如下所示:

{'id': 'sa.types.VARCHAR(length=100)'}

而不是当前的:

{'id': sa.types.VARCHAR(length=100)}

【问题讨论】:

  • 什么是合适的数据类型?你为什么不直接使用它而不是VARCHAR
  • “数据类型将显示为字符串”是什么意思?
  • 我添加了一个说明
  • 我认为您所看到的正是sa.types 类代表自身的方式。这不是一个真正的字符串。
  • 它是一个类对象,它们没有字符串和数字等文字表示。他们选择使用类似字符串的外观而不是<sa.types ...> 表示法。

标签: python pandas string sqlalchemy


【解决方案1】:

这个解决方案很老套,如果我们掌握了所有信息,我必须相信会有更好的方法,但如果缺少这些信息,那就去吧。

我会创建一个类似于以下内容的字典:

type_dict = {
   'VARCHAR' : sa.types.VARCHAR,
   'Float'   : sa.types.Float, 
   ... }

然后,分解该字符串以获得您正在寻找的主要信息(我确信有更好的正则表达式方法可以做到这一点,但它已经过了我的就寝时间):

dtype = string.split('(')[0].split('.')[-1]
var   = string.split('(')[1].split('=').split(')')[0]

然后:

sql_dict = { 'id' : type_dict[dtype](var) }

【讨论】:

    猜你喜欢
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 2016-06-08
    相关资源
    最近更新 更多