有没有办法将pandas dataframe存储到Teradata选项卡

2024-10-01 09:27:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经创建了一个pandas数据框df,并尝试使用teradatasqlassistant将其存储在“表”中。在

连接字符串-

conn = pyodbc.connect(
         "DRIVER=Teradata;DBCNAME=tdprod;Authentication=LDAP;UID=" + username + ";PWD=" + password + ";QUIETMODE=YES",
        autocommit=True, unicode_results=True)

cursor = conn.cursor().execute(sql)

尝试使用:df.to_sql('table', con =conn)

这不管用。在

有没有更简单的方法将数据帧存储到表中。在

感谢任何帮助。在

谢谢。在

^{pr2}$

Tags: 数据字符串truepandasdfsqldriverconnect
3条回答

我已经做了一些挖掘工作,这个解决方案很快就完成了任务—使用python teradata模块:

import teradata
import numpy as np
import pandas as pd


num_of_chunks = 100  #breaking the data into chunks is optional - use if you have many rows or would like to view status updates

query = 'insert into SomeDB.SomeTeraDataTable'
df = someDataframe

#set host, user, password params
host,username,password = 'hostName_or_IPaddress','username', 'password'

#connet to DB using UdaExec
udaExec = teradata.UdaExec (appName="IMC", version="1.0", logConsole=False)


with udaExec.connect(method="odbc",system=host, username=username,
                            password=password, driver="Teradata") as connect:


    df_chunks = np.array_split(df, num_of_chunks)

    for i,_ in enumerate(df_chunks):

        data = [tuple(x) for x in df_chunks[i].to_records(index=False)]

        connect.executemany(query, data,batch=True)

解决方案基于:此stackoverflowpost

来自to_sql的文档:

Parameters
     
name : string
    Name of SQL table.
con : sqlalchemy.engine.Engine or sqlite3.Connection
    Using SQLAlchemy makes it possible to use any DB supported by that
    library. Legacy support is provided for sqlite3.Connection objects.

您可以看到您需要sqlalchemysqlite3,而不是pyodbc。在

要为Teradata创建引擎,需要执行以下操作:

from sqlalchemy import create_engine

engine = create_engine(f'teradata://{username}:{password}@tdprod:22/')

然后你会像

^{2}$

创建引擎('teradata://'+user+':'+password+'@'+host+':1025/'+'/'+'?身份验证=LDAP') 在连接字符串中同时添加主机名和身份验证对我很有效。在

相关问题 更多 >