我如何在不输入所有列名的情况下插入 pyodbc execute many?

how do i insert without inputting all column names with pyodbc execute many?

我正在尝试将我的数据插入到我的 MS 访问 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 列以上的 table,我不想写 "t(names,id,..etc)" 和“值 (?,?,...,?)”。我只想能够在不这样做的情况下输入我的参数。有什么建议吗?

我建议使用 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)