python - 如何将dataFrame中的数据加载到mssql表中
问题描述
engine = sqlalchemy.create_engine('mssql+pyodbc://<Username>:<password>@<DBServername>/<DBName>', pool_pre_ping=True)
我有数据要加载到 DataFrame 中,当我循环遍历 DF 中的每一行时,我可以使用连接字符串将数据插入表中(使用 INSERT INTO .. 语句一次插入 1 行),但我想使用<DataFrame>.to_sql("<Table_name>", engine, if_exists='append')
请帮助我了解我是否遗漏了什么?
但我不断收到此错误
/Library/Python/2.7/site-packages/sqlalchemy/connectors/pyodbc.py:79: SAWarning: No driver name specified; this is expected by PyODBC when using DSN-less connections
"No driver name specified; "
Traceback (most recent call last):
File "/Users/snaidu/renuka/python-projects/staging/test.py", line 131, in <module>
print(loaddmvcsvfile())
File "/Users/snaidu/renuka/python-projects/staging/test.py", line 115, in loaddmvcsvfile
result.to_sql("table1", engine, if_exists='append')
File "/Library/Python/2.7/site-packages/pandas/core/generic.py", line 1534, in to_sql
chunksize=chunksize, dtype=dtype)
解决方案
您需要指定要使用的 SQL 驱动程序,对于 MS-SQL,这将是本机驱动程序SQL Server Native Client 11.0
因此,例如,您可以使用以下内容:
cxn_string = 'mssql+pyodbc://<Username>:<password>@<DBServername>/<DBName>?driver=SQL+Server+Native+Client+11.0'
engine = sqlalchemy.create_engine(cxn_string, pool_pre_ping=True)
但这有点长,而且难以阅读,所以我通常会做一个辅助函数,像这样
import sqlalchemy
import urllib
def sql_connect(server, username, password, database, **kwargs):
'''Connect to SQL server'''
parameters = {'driver': 'SQL Server Native Client 11.0'}
string = r'mssql+pyodbc://{username}:{password}@{server}/{database}?{parameters}'
cxn_string = string.format(server=server,
username=username,
password=password,
database=database,
parameters=urllib.parse.urlencode(parameters))
return sqlalchemy.create_engine(cxn_string, **kwargs)
推荐阅读
- git - GitKraken 不会忽略 .gitignore 中的缓存文件
- git - Git rebase 挂出并创建许多 sh.exe 进程
- python - Python setuptools/distutils 自定义构建来自 GO 源的 `extra` 包
- javascript - 无法从节点标准输入中访问导入的节点模块
- azure-service-fabric - 本地服务结构添加节点和节点类型关联
- node.js - 启动节点 js npm 时出错
- android - Android Studio - ActionBar 未显示在预览中
- c - 为什么使用第三个变量比加法更快?
- javascript - 如何选择具有部分属性值的元素在两个数字之间
- tfs - TFS 2017 将代理池 V 1 更新到 V2.x