Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python CSV每天上传到同一个表中_Python_Pandas_Sqlalchemy_Teradata - Fatal编程技术网

Python CSV每天上传到同一个表中

Python CSV每天上传到同一个表中,python,pandas,sqlalchemy,teradata,Python,Pandas,Sqlalchemy,Teradata,我需要每天上传一个csv文件到teradata数据库。 我每天早上都会收到这个文件到ftp服务器,我想把数据拉出来上传到teradata, 到目前为止,我已经设法从ftp中提取数据,保存它,添加一个日期列,并用一个伪值填充空值 df2['WM_ID']=df2['WM_ID'].fillna('999999') 这真是个好办法,但使用另一种方法也会让我感到悲伤 现在我进入了必须将数据上传到现有表的部分。我成功地建立了连接: create_engine('teradata://'+ user +

我需要每天上传一个csv文件到teradata数据库。 我每天早上都会收到这个文件到ftp服务器,我想把数据拉出来上传到teradata, 到目前为止,我已经设法从ftp中提取数据,保存它,添加一个日期列,并用一个伪值填充空值

df2['WM_ID']=df2['WM_ID'].fillna('999999')
这真是个好办法,但使用另一种方法也会让我感到悲伤

现在我进入了必须将数据上传到现有表的部分。我成功地建立了连接:

create_engine('teradata://'+ user +':' + pasw + '@'+ host +'/' + '?authentication=LDAP')
这连接到主数据库,但该表位于子数据库中(不确定这是否是word),让我们称之为
user\u dev
。让我们调用表
test

我有一个csv,每天10列,大约4000行。 还有一些空值(不在主键中)

现在我不太确定声明式基和其他基,我尝试使用它们,但失败了

td_engine = create_engine('teradata://'+ user +':' + pasw + '@'+ host +'/' + '?authentication=LDAP')
print (td_engine)

connection = td_engine.raw_connection()

print ('logged in to teradata')
def Load_Data(file_name):
    data = genfromtxt(file_name, delimiter=',', skip_header=1, converters={0: lambda s: str(s)})
    return data.tolist()

Base = declarative_base()

class pb_test(Base):
  __Tablename__= "test"

  entry_date = Column(Date)
  WID = Column(VARCHAR(50),primary_key=True)
  User_IP_co = Column(VARCHAR(50))
  User_S = Column(VARCHAR(50))
  Visitors = Column(Integer)
  Reg = Column(Integer)
  Real = Column(Integer)
  Regi = Column(Integer)
  First = Column(Integer)
  First_D = Column(Integer)



  def __repr__(self):
    return "(entry_date='%s', WID='%s', User_IP_co='%s', User_S='%s', Visitors='%s', Reg='%s', Real='%s', Regi='%s', First='%s', First_D='%s')" % (self.entry_date, self.WID, self.User_IP_Co, self.User_S, self.Visitors, self.Reg, self.Real, self.Regi, self.First, self.First_D)


yesterday = date.today() - timedelta(1)
FileToRead = pd.read_csv('Report20'+str(yesterday.strftime('%y%m%d'))+'.csv')
tableToWriteTo = 'USER_DEVELOPMENT.test'
#data.head()
df = pd.DataFrame(FileToRead)


listToWrite = df.to_dict(orient='records')

metadata = sqlalchemy.schema.MetaData(bind=td_engine,reflect=True)
table = sqlalchemy.Table(tableToWriteTo, metadata, autoload=True)

Session = sessionmaker(bind=td_engine)
session = Session()

connection.execute(table.insert(), listToWrite)

session.commit()

session.close()
不确定出了什么问题,但我收到了以下错误消息:

sqlalchemy.exc.InvalidRequestError: Class <class '__main__.test'> does not have a __table__ or __tablename__ specified and does not inherit from an existing table-mapped class.
sqlalchemy.exc.InvalidRequestError:类没有指定_table或_tablename,并且没有从现有的表映射类继承。

我觉得你的方法有点混乱。您定义了一个声明性基,但没有使用它。如果你想走那条路线,那么看看这个。(如前所述,您需要的参数是tablename。此外,您可能需要使用table_args来指定模式)

或者,您也可以在尝试从底部删除时定义表及其列。有关此方法的详细信息,请参阅

鉴于您的任务简单,我可能会选择选项2


\uuuu表名
!=<代码>\uuuu表名。
#table = sqlalchemy.Table(tableToWriteTo, metadata, autoload=True)
table = Table(
    'test',
    metadata,
    Column('WID', VARCHAR(50),primary_key=True),
    Column('entry_date', Date),
    Column('User_IP_co', VARCHAR(50)),
    Column('User_S', VARCHAR(50)),
    ...,
    schema='USER_DEVELOPMENT'
)