Skip to main content
 首页 » 编程设计

python 通过给定列表生成 SQL 语句关键字

2025年05月04日10xiaohuochai

我有以下变量尝试在 python 中自动生成 SQL 语句

_SQL_fields         =   ("ID", "NAME", "BIRTH", "SEX", "AGE") 
_add_SQL_desc_type  =   ("PRIMARY KEY AUTOINCREASEMENT",) 
_SQL_type           =   ("INT",'TEXT') 
_Value              =   (1,'TOM',19700101,'M',40) 
 
bop = ["AND"] * (len(_SQL_fields) - 1)  
mop = ["="] * 5 
comma = [","] * 4 
 
exception_field = ["NAME", "BIRTH"] 

为了成功设计 SQL 语句,我需要以下由上述变量生成的字符串:

'(ID, NAME, BIRTH, SEX, AGE)' 
'(ID PRIMARY KEY AUTOINCREASEMENT INT, NAME TEXT, BIRTH, SEX, AGE)' 
'ID = 1 AND NAME = "TOM" AND BIRTH = "19700101" AND SEX = "M" AND AGE = '40'' 

并且删除了 exception_field 字符串可能看起来像

'(ID, SEX, AGE)' 
'(ID PRIMARY KEY AUTOINCREASEMENT INT, SEX, AGE)' 
'ID = 1 AND SEX = "M" AND AGE = '40'' 

==========

到目前为止我使用类似

的东西
str(zip(_SQL_fields,_add_SQL_desc_type,_SQL_type,comma))  

或使用

", ".join(_SQL_fields)  

得到一个。

但我遇到很多麻烦,尤其是在处理“逗号”和“引号”时。

'(ID, NAME, BIRTH, SEX, AGE)'    <===== this is OK for SQL 
'(ID, NAME, BIRTH, SEX, AGE,)'    <===== this is NOT 

还有这个

'ID = 1 AND NAME = "TOM" AND BIRTH = "19700101" AND SEX = "M" and AGE = '40'   
                   ^-some var need quotes and some do no need them. 

所以有人可以和我分享如何编写干净的代码来生成上述字符串吗?

感谢您的宝贵时间!

KC

请您参考如下方法:

获得

'(ID PRIMARY KEY AUTOINCREASEMENT INT, NAME TEXT, BIRTH, SEX, AGE)' 

你可以使用izip_longest来自 python 中的 itertools 模块。

然后,要删除获取列表中的 exception_fields,您可以使用集合或列表推导。

l1 = [1, 2, 3, 4] 
l2 = [2, 3] 
l3 = list(set(l1) - set(l2)) 
print l3 
--> [1, 4] 
 
l3 = [val for val in l1 if val not in l2] 
print l3 
--> [1, 4] 

我推荐列表理解。

", ".join(_SQL_fields)  

完美获得

'ID, NAME, BIRTH, SEX, AGE' 

所以我真的不明白你有问题。