首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用熊猫数据table在SQL表中插入

问使用熊猫数据table在SQL表中插入
EN

Stack Overflow用户
提问于 2019-04-29 01:36:40
回答 1查看 2.9K关注 0票数 0

我正在我的DB类中创建一个公共函数,它以dataframe作为参数并将数据插入到一个表中。我希望在其他模块中重用这个函数,因为大多数其他模块都会插入到这个表中。我正在考虑检查dataframe是否没有要插入的列,然后在列中插入null。应该向dataframe中添加加法列,但这意味着编辑原始的dataframe,并添加带有空值的其他列,或者其他方式是跳过插入中的列名,后者将在表中插入null (列为空)。记住可重用性和应用重要的面向对象的概念,实现这一目标的最佳方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2019-04-29 02:30:54

如果您的表不太大,您可以很容易地做到这一点,遵循以下流程:

如果您的表不太大,您可以很容易地做到这一点,遵循以下流程:

代码语言:javascript
复制
ta = pd.read_sql('table', engine) #dataframe that exists already in SQL
tb #new dataframe that has columns that the other dataframe does not have

for i in list(tb.columns):
    if i in list(ta.columns):
        pass
    else:
        ta[i] = 'NULL'

tconso = ta.append(tb)
tconso.to_sql('table', engine, if_exists='replace')

更新

因为您声明您的数据很大,所以您可以在sql中直接修改表,在外部执行附加内容:

1)导入库

代码语言:javascript
复制
import sqlalchemy
from sqlalchemy import create_engine, MetaData, Table, func, event
from sqlalchemy.sql import text
from urllib.parse import quote_plus

2)联系:

代码语言:javascript
复制
params = urllib.parse.quote_plus(r'...')
conn_str = 'mssql+pyodbc:///?odbc_connect={}'.format(params)
engine = create_engine(conn_str, echo=True)

3)如果列是新列,则运行查询,并在添加新列后推送表:

代码语言:javascript
复制
ta = pd.read_sql('table', engine) #dataframe that exists already in SQL
tb #new dataframe that has columns that the other dataframe does not have

for i in list(tb.columns):
    if i in list(ta.columns):
        pass
    else:
        query = text('ALTER TABLE [dbo].[table] ADD ' + i + ' VARCHAR(50)')
        connection = engine.connect()
        connection.execute(query)
        connection.close()

tb.to_sql('table', engine, if_exists=append)

,从新的DF中删除新列。

代码语言:javascript
复制
ta = pd.read_sql('table', engine) #dataframe that exists already in SQL
tb #new dataframe that has columns that the other dataframe does not have

for i in list(tb.columns):
    if i in list(ta.columns):
        pass
    else:
        tb.drop(columns=[i])

tb.to_sql('table', engine, if_exists=append)

如果这有用的话请告诉我。BR

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55896022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档