【发布时间】:2019-12-10 23:23:35
【问题描述】:
我有一个 Excel 文件。我将其导入数据框并尝试使用数据更新数据库表。
import pyodbc
def get_sale_file():
try:
cnxn = pyodbc.connect('DRIVER=ODBC Driver 17 for SQL Server;'
'SERVER=' + server + ';DATABASE=' + database + ';UID=' + uname + ';PWD=' + pword,
autocommit=False)
files = os.listdir(ile_path)
df = pd.DataFrame()
for f in files:
if (f.endswith('.xlsx') or f.endswith('.xls')):
df = pd.read_excel(os.path.join(sap_file_path, f))
df.to_sql('temptable', cnxn, if_exists='replace')
query = "UPDATE MList AS mas" + \
" SET TTY = temp.[Territory Code] ," + \
" Freq =temp.[Frequency Code]," + \
" FROM temptable AS temp" + \
" WHERE mas.SiteCode = temp.[ri a]"
当我执行上面的代码块时;我明白了
1/12/2019 10:19:45 AM ERROR: Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': ('42S02', "[42S02] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid object name 'sqlite_master'. (208) (SQLExecDirectW)")
我是否以正确的方式尝试?除了to_sql?,panads 还有其他更新mssql表的功能吗?
如何克服上述错误?
编辑 我是否必须事先创建 temptable 才能加载 datafarme?如果是这样,我的文件包含 100 列,它可能会有所不同..(除了少数列)我如何确保 pandas 仅将几列加载到 temptable?
【问题讨论】:
-
你可以使用sqlalchemy,看看这个如何建立连接stackoverflow.com/questions/15750711/…
-
你确定cnxn包含一些吗?...
-
您是否尝试使用 SQL Server 驱动程序访问 sqlite 数据库?错误是说 sqlite_master 无效。如果是这样,Python 已经内置了 sqlite 支持,并且不需要使用 ODBC。
-
@GiovaniSalazar 对不起,我的错,我想我必须在将文件加载到数据框之前在数据库中创建临时表?如果是这样,我的文件包含 100 列,它可能会有所不同..(除了少数列)如何确保 pandas 仅将几列加载到 temptable 中?
-
@GiovaniSalazar 使用 urllib+sqlalchemy+pyodbc 非常感谢。您可以在此处发布您的 pastebin 答案。 urllib.parse.quote_plus 正在工作
标签: python python-3.x pandas pyodbc