目前,我的团队有一个脚本,每天晚上克隆我们代码的最新版本,并在我们的计算集群上运行一组长时间运行的案例。每个案例在其各自的目录中输出一个performance.csv
。这导致了一个整体目录结构,每晚都充满了 git 存储库,可以追溯到大约 2 年前。
我想将此性能数据存储在数据库中,以便我们可以了解我们的代码如何随时间推移的性能变化。
我对数据库一无所知,也不确定制作表格的最佳方法是什么。
我编写了一个 python 脚本,它获取每个 git-repo 的所有性能数据,并将其填充到没有索引或键的 sqlite 数据库中。
这是我的文件系统的简化示例
- projects/git/
- git_20200501/
|---- assessment/test01/performance.csv
|---- assessment/test02/performance.csv
|---- assessment/test03/performance.csv
- git_20200502/
|--- assessment/test01/performance.csv
|--- assessment/test02/performance.csv
|--- assessment/test03/performance.csv
- git_20200503
|--- assessment/test01/performance.csv
|--- assessment/test02/performance.csv
|--- assessment/test03/performance.csv
我使用 pandas 来读取数据,并添加了一些列来帮助使每条记录独一无二。生成的 dfs 看起来像这样
repo_root repo_hash repo_date path simulation_alive_time
/projects/git/git_20200501 8cdf06... 20200501 assessment/test01/perfomance.csv 0.000000
/projects/git/git_20200501 8cdf06... 20200501 assessment/test01/perfomance.csv 0.438507
/projects/git/git_20200501 8cdf06... 20200501 assessment/test01/perfomance.csv 0.614212
/projects/git/git_20200501 8cdf06... 20200501 assessment/test01/perfomance.csv 0.710791
/projects/git/git_20200501 8cdf06... 20200501 assessment/test01/perfomance.csv 0.808077
然后,我只做一个嵌套的for循环;遍历所有存储库及其后续性能csv,并将其附加到数据库中。
我这样做的方式是否正确?
sqlite3非常适合这个项目,不需要那么多的知识就可以启动和运行它。
from sqlite3 import connect
connection = connect('database/YourDatabaseName.db')
连接将为您创建一个数据库。 这也是您在创建 Alreaddy 后访问数据库的方式。
cursor = connection.cursor()
从这里开始,您的SQL将根据您要执行的操作而有所不同。那里有大量的sql复制和粘贴数据,但一些主要方法是创建表和添加值。这些数据库中的数据存储在表中,因此要输入数据,您必须在数据库中创建一个表。
sql = "CREATE TABLE TableName (DataFeature1 DataType1, DataFeature2 DataType2);"
cursor.execute(sql)
connection.commit()
提交会将更改保存到数据库。SQL有自己的特定数据类型,具体取决于您的用例,您将不得不查找确切的类型,但就像我之前说的,非常容易找到和复制/粘贴的东西
我会给你的一大提示是,永远不要一次把记录放在一个记录中,我相信你可以一次做 1,000 条,但格式有点不同。
sql = "INSERT INTO `TableName` (`col1`, `col2`) VALUES (Entry1Col1, Entry1Col2),(Entry2Col1,Entry2Col2), ...;"
然后,您将执行此 SQL 以上传所有条目及其相应的列。希望这有帮助!