【问题标题】:Easiest way to write to a SQL table with python使用 python 写入 SQL 表的最简单方法
【发布时间】:2019-02-15 18:59:58
【问题描述】:

我正在寻找一种简单易懂的方法来写入数据库中的 SQL 表。 我尝试了几种不同的方法,但仍然遇到一些错误,并且不知道如何解释它们。 就我而言,我尝试编写一个 pandas 数据框,但它也可以是 2D numpy 数组。 我目前的做法如下:

# Import libraries:
from pandas.core.frame import DataFrame
from sqlalchemy import create_engine
import urllib

# In this example, a pandas dataframe is created as below:
cols = ['key1', 'locationKey', 'locationGroupKey', 'dayType', 'effectiveFromDate', 'effectiveToDate', 'prctAM0', 'prctAM1', 'prctAM2', 'prctPM0', 'prctPM1', 'prctPM2', 'prctEV0', 'prctEV1', 'prctEV02', 'prctAD']
values = [[178,10218,0,'2018-06-06 00:00:00','2018-06-06 00:00:00','2018-06-06 00:00:00',.33,0,0,.33,0,0,.33,0,0,0],                
        [178,10218,0,'2018-06-06 00:00:00','2018-06-06 00:00:00','2018-06-06 00:00:00',.33,0,0,.33,0,0,.33,0,0,0],
        [178,10218,0,'2018-06-06 00:00:00','2018-06-06 00:00:00','2018-06-06 00:00:00',.33,0,0,.33,0,0,.33,0,0,0],]
df = DataFrame(values, columns = cols)

# Create connection:
quoted = urllib.parse.quote_plus('DRIVER={SQL Server};SERVER=myServername;DATABASE=myDBname;UID=fieldReadUser;PWD=myPW')
engine = create_engine('mssql+pyodbc:///?odbc_connect={}'.format(quoted))

# Write into SQL table:
df.to_sql('tbl_Interval, schema='dbo', con=engine, if_exists='append', index = False)

编辑:根据下面列出的建议,代码现在正在写入表中。

【问题讨论】:

  • int is incompatible with text
  • @RobertHarvey:我尝试用整数替换数据框中的字符串,并将所有数据框元素转换为字符串(以防数据库只接受字符串。两者仍然给我同样的错误。

标签: python sql database pandas pyodbc


【解决方案1】:

to_sql 的第一个参数只是表名。如果您需要指定架构,则将其单独提供为schema=,例如,

df.to_sql('tbl_Interval', engine, schema='dbo', if_exists='append', index=False)

【讨论】:

  • 谢谢,这让我更进一步。我更新了帖子,仍然有一个“无效的列名 'index'”,我认为它是来自 pandas 数据框的索引。
  • @Hendrik 然后设置index=False
  • @Hendrik - 正如 mad_ 所建议的,我已经更新了答案。
猜你喜欢
  • 1970-01-01
  • 2010-10-15
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
相关资源
最近更新 更多