【问题标题】:how do i insert without inputting all column names with pyodbc execute many?如何在不输入所有列名的情况下插入 pyodbc 执行很多?
【发布时间】:2015-09-28 07:31:54
【问题描述】:

我正在尝试将我的数据插入到我的 ms access sql 连接中。如何编写不需要输入所有列名和“?”的插入语句价值观。

例如来自https://code.google.com/p/pyodbc/wiki/Cursor

对每组参数执行相同的 SQL 语句。 seq_of_parameters 是一个序列序列。

params = [ ('A', 1), ('B', 2) ]
executemany("insert into t(name, id) values (?, ?)", params)

这将执行 SQL 语句两次,一次使用 ('A', 1),一次使用 ('B', 2)。

我有一个超过 22 列的表,我不想写“t(names,id,..etc)”和“values (?,?,...,?)。我只想成为能够在不这样做的情况下输入我的参数。有什么建议吗?

【问题讨论】:

标签: python pandas ms-access-2010 pyodbc


【解决方案1】:

我建议使用sqlalchemy。它的核心语言是独立于数据库 API 的(因此所有广泛使用的 sql 数据库如 MySQL、sqlite、cx_oracle 等都有相同的接口),pandas 使用它作为与 sql 数据库交互的默认包。您不必手动输入这些 SQL 语句,df.to_sql 会处理它。示例代码如下所示。

from sqlalchemy import create_engine
import pandas as pd

# create an engine with the following syntax
# mssql (MicroSoft SQL)
# pyodbc (the python database api to your sql)
# username, password, database_name
ms_sql_engine = create_engine('mssql+pyodbc://my_username:my_password@my_database_name')

# I don't have MS sql installed in my PC, so just use sqlite in memory here
my_engine = create_engine('sqlite:///:memory:')


# your data in pandas dataframe
df = pd.DataFrame(np.random.randn(100, 5), columns='A B C D E'.split())

# write to sql
# replace engine with your own MS sql engine
df.to_sql('my_frame', my_engine)

【讨论】:

  • sqlalchemy 不支持 ms 访问。你知道如何为它安装方言吗? bitbucket.org/zzzeek/sqlalchemy-access/overview
  • 该方言是只读的,因此无论如何它都不适用于插入。不幸的是,我对 Access 不够熟悉,不知道如何以您想要的方式潜在地查询系统对象。
  • 2019 年 9 月更新:sqlalchemy-access 方言已经复活,主要是为了帮助to_sql。详情here.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-26
  • 1970-01-01
  • 2010-09-12
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
相关资源
最近更新 更多