DataFrame 直接写入数据to_sql的用法记录

最近项目中用了DataFrame的to_html,to_excel,使用起来非常方便!今天使用了to_sql来直接写SqlServer数据,比Django的Model操作起来更简单,把使用要点记录下来,备查:

(1)、需要安装sqlalchemy,引入:

from sqlalchemy import create_engine

(2)、创建数据库引擎,获取Django中的数据库设置,生成引擎:engine

user = settings.DATABASES['default']['USER']
password = settings.DATABASES['default']['PASSWORD']
database_name = settings.DATABASES['default']['NAME']
host=settings.DATABASES['default']['HOST']
port = settings.DATABASES['default']['PORT']
engine=create_engine('mssql+pymssql://{user}:{password}@{host}:{port}/{database_name}'.format(user=user,password=password,database_name=database_name,host=host,port=port), echo=True)

(3)、生成好DataFrame数据,注意DataFrame中的列名和数据库对应表的列名一致。调用to_sql直接写数据库。

DF_User.to_sql('ExamWeb_userinfo', engine, index=False, if_exists='append')

to_sql的参数说明如下:

name:string,要写的数据库表的名称。

con:sqlalchemy.engine.Engine或sqlite3.Connection,即创建的engine使用SQLAlchemy可以使用该库支持的任何数据库。为sqlite3.Connection对象提供了旧版支持。

schema:string,optional指定架构(如果数据库支持)。如果为None,请使用默认架构。

if_exists:{'fail','replace','append'},默认'fail'如果表已存在的情况如下,fail:引发ValueError。replace:在插入新值之前删除表。append:将新值插入现有表。一般使用append向现有表中插入数据

index:布尔值,默认为True,将DataFrame索引写为列。使用index_label作为表中的列名。

index_label:字符串或序列,默认为None索引列的列标签。如果给出None(默认)且 index为True,则使用索引名称。如果DataFrame使用MultiIndex,则应该给出一个sequence。

chunksize:int,可选行将一次批量写入的数量。默认情况下,所有行都将立即写入。

dtype:dict,可选指定列的数据类型。键应该是列名,值应该是SQLAlchemy类型,或sqlite3传统模式的字符串。

注:

这样调用直接写入数据,如果要更新数据目前还没有找到解决办法,待查

发布于 2021-03-16 15:16