无法从MS Access查询结果创建数据帧

2024-05-03 17:19:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我发现了错误

ValueError: Shape of passed values is (109861, 1), indices imply (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()

Tags: fromimport数据库datetimedateaccesstimeprod
1条回答
网友
1楼 · 发布于 2024-05-03 17:19:39

您正在使用相同的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",
)

相关问题 更多 >