自 6 月以来,我一直在使用 Python 执行 SQL 查询并每天检索前一个日期的数据,并将其加载到本地的 Postgres 数据库中。每个日期大约有 200 万行和 75 列左右,因此它相当大,需要一段时间才能拉出。
有人可以给我一个生成 CSV(逗号)文件的示例 bcp 代码吗?我一次可以提取多少数据,或者我可以循环遍历 SELECT 语句中的每个日历日期?我希望这将是一种更快的方法来复制我感兴趣的表。
我的 Python 代码基本上归结为 SELECT * FROM table_name WHERE report_date = {}。报告日期通常是昨天。
如果其他人都偶然发现,这是我的最终工作结果。subprocess.run 执行包含 BCP 查询的字符串。在下面的代码中,有一些变量,例如 table_name、数据库名称和查询日期,因为我在不同日期循环访问不同的表和数据库。
path = 'C:/raw/'
filename = '{}_{}.csv'.format(database, select_database(database)[table_int])
query = '"SELECT * FROM {}.dbo.{} WHERE row_date = \'{}\'"'.format(database, select_database(database)[table_int], query_date)
command = 'BCP {} queryout \"{}\" -t, -c -S "server_name" -T'.format(query, os.path.join(path, filename))
table_name = 'raw_{}_{}'.format(select_database(database)[table_int], database)
logger.info(command)
subprocess.run(command)
互联网上有很多示例 - 搜索“bcp comma delimited”另外,请参阅此处的 BCP 语法。
这应该让你开始:
您可以根据需要使用查询每月 BCP 出局,也可以 BCP 出整个表。
或者
有多个可用于 BCP 的开关,在这种情况下使用以下开关:
还有更多可用的开关(MSDN 有完整参考),因此您可能需要调整一些东西以获得您需要的东西。如果一切都失败了,您可以创建格式文件以确保以您需要的确切方法获取数据。