匿名SQLite数据库?

时间:2015-08-08 16:30:38

标签: sql sqlite

问题:我有一个包含名字,姓氏和性别列的表格。我需要通过用任意组成的名称替换此表中的所有名称来部分匿名数据库。我还有一个电子表格,其中包含许多针对性别的任意名称。

鉴于此,如何遍历此表的行,并依次用电子表格中的名称替换每个名称?

我可以相当简单地在C中执行此操作,但这只是工作日 - 将电子表格导出为CSV,然后遍历表格的行,使用CSV文件中的下一个更新每个名称。但是,通过将CSV名称数据转换为脚本,我无法感觉有更简单的方法,但我不知道如何从脚本中遍历表格。任何指针/想法都赞赏。

1 个答案:

答案 0 :(得分:1)

我相信您使用C或Python或任何您觉得方便的应用程序路径都在正确的轨道上。这是一种可以编写脚本的不同方法。

将数据从Excel导出为CSV

$ cat test.csv 
Jacob Jacobs,M 
Rogers Bogers,M
Marsha Darsha,F
Tina Fina,F    
Mono Bono,M   

将其导入sqlite

sqlite> .mode csv
sqlite> .import test.csv proxy
sqlite> select * from proxy2;
"Jacob Jacobs",M             
"Rogers Bogers",M            
"Marsha Darsha",F            
"Tina Fina",F                
"Mono Bono",M                

记住男性和女性的数量

假设您的表名为main,其中您有真实姓名,并且您想要将它们随机更改为proxy表中的名称。

sqlite> .schema
CREATE TABLE proxy (fullname text, gender text);
CREATE TABLE main(fullname TEXT,gender TEXT,age INT);

sqlite> select * from main;
fullname,gender,age
"John Smith",M,20
"Marshall Dubin",M,20
"Kate Ortiz",F,20
"Ron Bunsh",M,20
"Kelly Torro",F,20

sqlite> select count(*) from main where gender='M';
count(*)                                           
3                                                  
sqlite> select count(*) from main where gender='F';
count(*)                                           
2                                                  

让您的应用程序记住有3名男性和2名女性的信息。

使用不同的偏移重复执行更新语句

sqlite> update main
   ...> set fullname = (
   ...>   select fullname from proxy where gender='M' order by random() limit 1)
   ...> where rowid = (
   ...>   select rowid from main where gender='M' order by rowid limit 0,1);

limit 0,1更改为limit 1,1并重新执行。继续,直到你到达limit 2,1。由于您有3条男性记录,请从限制0,1到限制2,1。

重复相同的事情以匿名化女性记录。将gender='M'更改为gender='F'。由于只有2位女性,因此您将执行update两次。一次使用limit 0,1,然后使用limit 1,1

如果你在一个事务中运行它,我希望你的脚本应该能够很快地完成更新。

最终结果

WAS

fullname    gender      age       
----------  ----------  ----------
John Smith  M           20        
Marshall D  M           20        
Kate Ortiz  F           20        
Ron Bunsh   M           20        
Kelly Torr  F           20        

IS

fullname       gender      age       
-------------  ----------  ----------
Rogers Bogers  M           20        
Jacob Jacobs   M           20        
Tina Fina      F           20        
Jacob Jacobs   M           20        
Jasmine        F           20        

使用Bash编写SQLite脚本的示例 - http://andreaolivato.tumblr.com/post/133473114/using-sqlite3-in-bash 其他选项

  • 在您的应用程序中,将假名称保存在两个数组中 - 一个用于男性,一个用于女性。我们的想法是能够按需按性别提取随机假名
  • 执行select rowid, gender from main order by rowid
  • 迭代记录
  • 如果性别是男性,请从男性阵列中随机抽取假记录;同样为女性记录
  • 运行update main set fullname=<fake-record> where rowid=<selected-row-id>