小编Adi*_*i E的帖子

如何使用 pandas 截断表?

我有一个执行几次的函数,每次它都使用以下代码将元素附加到 SQL Server 上的表:

import pandas as pd
import pandas.io.sql as pdsql
import pyodbc

params = [(self.key[int(el[0])], bid, label, tr_date, el[1]) for el in elements]
df = pd.DataFrame(params, columns=['ID', 'BID', 'Label', 'tr_date', 'Score'])
engine = sqlalchemy.create_engine('mssql+pyodbc://MY-SERVER/Test')
df.to_sql(out_tbl, engine, if_exists='append', index=False)
Run Code Online (Sandbox Code Playgroud)

但是,在输入上述代码之前,我想截断(甚至删除)该表。我在 pandas.io.sql 中没有找到任何专用函数。所以我尝试创建一个空数据框只是为了调用:

df1 = pd.DataFrame()
df1.to_sql(out_tbl, engine, if_exists='replace', index=False)
Run Code Online (Sandbox Code Playgroud)

此代码确实删除了表,但随后在尝试重新创建空表时从 sqlalchemy 生成异常。我可以捕获并忽略它,下一次使用 if_exists='append' 调用 to_sql() 将正确创建表,但这非常丑陋。

我尝试的另一种方法是清除原始数据框中的所有行,保留列:

df1 = df.drop(df.index)
df1.to_sql(out_tbl, engine, if_exists='replace', index=False)
Run Code Online (Sandbox Code Playgroud)

这几乎有效:它截断表,但然后插入所有字段为 NULL 的单个记录...

目前我的解决方法是为此任务保留另一个 pyodbc 连接:

sql = "DELETE FROM " + out_tbl
try:
    cursor.execute(sql) …
Run Code Online (Sandbox Code Playgroud)

python sql sql-server sqlalchemy pandas

5
推荐指数
1
解决办法
1万
查看次数

如何升级到最新的Anaconda 5.0.1

我有Anaconda 4.4.0(Windows,Python 3.6.,64位).我想升级到最新的Anaconda 5.0.1

几个选项:

  1. 下载完整安装程序并运行它
  2. 从现有安装(4.4.0)运行"conda update --all"
  3. 从现有的安装运行"conda update anaconda"

这些选择之间的权衡是什么?推荐的是什么?

python python-3.x anaconda

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

python ×2

anaconda ×1

pandas ×1

python-3.x ×1

sql ×1

sql-server ×1

sqlalchemy ×1