【问题标题】:Unable to create data frame from MS Access query results无法从 MS Access 查询结果创建数据框
【发布时间】:2020-12-23 20:47:41
【问题描述】:

我正在尝试从 MS Access 数据库 MDB 文件中插入信息,不幸的是,我不知道如何使用 Python 分隔数据库表中的列。

我收到了错误

ValueError: 传递值的形状是 (109861, 1),索引意味着 (3,1)

我使用的代码是:

import os
import shutil
import pyodbc
import pandas as pd
import csv
from datetime import datetime
conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\\Users\\sguerra\\Desktop\\Python\\Measurements-2020-12-15.mdb;')
cursor = conn.cursor()
cursor.execute('select * from Measurements')
new = cursor.fetchall()
columns = ['Prod_Date','Prod_Time','CCE_SKU']
df = pd.DataFrame(new,columns)

for row in df.itertuples():
    cursor.execute('''
                   insert into MITSF_1.dbo.MeasurementsTest ([Prod_Date],[Prod_Time],[CCE_SKU])
                   VALUES (?,?,?)
                   ''',
                   row.Prod_Date,
                   row.Prod_Time,
                   row.CCE_SKU
                   )
conn.commit()

【问题讨论】:

  • 第一个 MDB 文件表示 Access 数据库。你为什么要为此使用 Pandas?真的有一个名为MITSF_1.dbo.MeasurementsTest的表吗?
  • 你好@Parfait,是的,我知道MDB是Access数据库,我想做的是将我们设备在Access中生成的所有日常信息整合到我的SQL数据库中,是的,有我的 SQL 数据库中名为“MITSF_1.dbo.MeasurementsTest”的表
  • Access 运行 SQL。所以它是一个SQL数据库。你是说 SQL Server 数据库吗?具体来说,该表是 MS Access 中指向 SQL Server 数据库的链接表吗?

标签: python pandas ms-access pyodbc


【解决方案1】:

您正在使用相同的cursor 来尝试执行selectinsert,因此这两个语句将在同一个数据库上运行。为简单起见,您应该使用 pandas 的 read_sql_query() 从 Access 读取所需的列,然后使用 to_sql() 将它们写入 SQL Server:

df = pd.read_sql_query(
    "SELECT [Prod_Date],[Prod_Time],[CCE_SKU] FROM Measurements",
    conn,
)
from sqlalchemy import create_engine
engine = create_engine(
    "mssql+pyodbc://scott:tiger@192.168.0.199/MITSF_1"
    "?driver=ODBC+Driver+17+for+SQL+Server",
    fast_executemany=True,
)
df.to_sql("MeasurementsTest", engine, schema="dbo", 
    index=False, if_exists="append",
)

【讨论】:

  • 您好,它给了我一个错误:InterfaceError: (pyodbc.InterfaceError) ('28000', "[28000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]登录失败用户'scott'。(18456) (SQLDriverConnect); [28000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]用户'scott'登录失败。(18456)")
  • 嗯,scott:tigeryour_username:your_password 的占位符值。根据需要替换您自己的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-03
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
相关资源
最近更新 更多