Мы не знаем, какой класс newrow
. Для этого я буду использовать идентификатор RowClass
.
(например, RowClass = newrow.__class__
)
Идея состоит в том, чтобы создать словарь с целыми числами в качестве ключей и функциями для вызова в качестве значений и найти функцию со значением по умолчанию setDouble
newrow
и объектную нотацию, что потребует перестройки словаря при каждом новом значении newrow
.
calldict = {
15 : RowClass.setCharString,
7 : RowClass.setInteger,
11 : RowClass.setBoolean,
12 : lambda self,i,r : RowClass(self,i,r.year,r.month,r.day) # special case to match 2 arguments
# same principle for others, of course
}
ваш цикл с добавлением, сначала поиск функции, затем вызов функции:
while row is not None:
for i in range(0,colCount):
if row[i] is not None:
# look up the function
function_to_call = calldict.get(i,RowClass.setDouble)
# call the function, passing the object as first argument:
function_to_call(newrow,i,row[i])
After some help from this site and some trial and error:
select table_name from systable
go
Painfully enough, sp_help
doesn't exist in my version.
Я не знаком с systables. Какой вид Sybase вы используете? Возможно, ASA?
Пожалуйста, найдите добавленную функцию sqsh (которую вы можете поместить в свой .sqshrc), которая демонстрирует некоторые запросы к таблицам каталога ASE (Adaptive Server Enterprise) и использование библиотеки хранимых процедур системы Эда Барлоу http://www.edbarlow.com/gem/procs_only/index.htm, чтобы выяснить, какие объекты находятся в базе данных.
# Shorthand for sp__helptext or sp__revtable \func -x ? IF EXISTS (SELECT * FROM sysobjects WHERE name = \\'${1}\\') BEGIN DECLARE @type VARCHAR(3) SELECT @type = type FROM sysobjects WHERE name = \\'${1}\\' IF @type IN (\\'U\\') exec sp__revtable ${1} ELSE exec sp__helptext ${1} END ELSE -- default to sp__ls (which can list partial matches) if an exact match wasn't found in sysobjects exec sp__ls ${1} go \done
У вас работает sp_tables
? Вы пытаетесь завершить табуляцию при создании запроса?