Python генерирует ключевые слова оператора SQL по заданным спискам - PullRequest
2 голосов
/ 12 августа 2010

У меня есть переменные ниже, попробуйте автоматически генерировать SQL-оператор в python

_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''

и удаленные строки исключения_ могут выглядеть как

'(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

1 Ответ

0 голосов
/ 13 августа 2010

Чтобы получить

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

, вы можете использовать izip_longest из модуля itertools в python.

Затем, чтобы удалить исключительные поля в списке получения, вы можете использовать setили список понимания.

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'

, поэтому я не совсем понимаю, что у вас проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...