Создайте объект, который имеет закрытый метод для создания соединения с базой данных, и публичный метод GetData, который принимает строку sql и возвращает набор записей, используя это закрытое соединение.
Private conn as ado.connection
Private sub OpenConn()
'code to set conn
if not conn.state = adostateopen then
conn.connectionstring = "put your string here"
conn.open
end if
end sub
Public function GetData(s as string) as recordset
openconn
dim rs as recordset
set rs = conn.execute s
end function
(реплики с жалобами на то, что они не очищают входные данные и не работают с базой данных и т. Д.)
Не уверенный, каков вариант использования. Вот мое предположение: Вы собираетесь сделать одноразовое преобразование от Perl до Python.
Perl имеет это
%config = (
'color' => 'red',
'numbers' => [5, 8],
qr/^spam/ => 'eggs'
);
В Python это было бы
config = {
'color' : 'red',
'numbers' : [5, 8],
re.compile( "^spam" ) : 'eggs'
}
Так, я предполагаю, что это - набор Ре для замены
%variable = (
с variable = {
);
с }
variable => value
с variable : value
qr/.../ =>
с re.compile( r"..." ) : value
Однако встроенный Python dict
не делает ничего необычного с regex как ключ хеша. Для этого необходимо было бы записать собственный подкласс dict
, и переопределение __getitem__
проверять ключи REGEX отдельно.
class PerlLikeDict( dict ):
pattern_type= type(re.compile(""))
def __getitem__( self, key ):
if key in self:
return super( PerlLikeDict, self ).__getitem__( key )
for k in self:
if type(k) == self.pattern_type:
if k.match(key):
return self[k]
raise KeyError( "key %r not found" % ( key, ) )
Вот пример использования подобного Perl dict.
>>> pat= re.compile( "hi" )
>>> a = { pat : 'eggs' } # native dict, no features.
>>> x=PerlLikeDict( a )
>>> x['b']= 'c'
>>> x
{<_sre.SRE_Pattern object at 0x75250>: 'eggs', 'b': 'c'}
>>> x['b']
'c'
>>> x['ji']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 10, in __getitem__
KeyError: "key 'ji' not found"
>>> x['hi']
'eggs'
Действительно ли использование чистого Python является требованием? В противном случае можно загрузить его в Perl и преобразовать его в YAML или JSON. Затем используйте PyYAML или что-то подобное для загрузки их в Python.
Я также нашел PyPerl, но это, кажется, не сохраняется. Я предполагаю, что что-то вроде этого - то, что я искал - модуль, который сделал некоторую основную интерпретацию Perl и передал результат как объект Python. Интерпретатор Perl, который перестал работать на чем-либо слишком сложном, будет прекрасен.:-)
Я просто превратил бы структуру данных Perl во что-то еще. Не видя фактический файл, могла бы быть некоторая дополнительная работа, которую не делает мое решение.
Если единственной вещью, это находится в файле, является одно объявление переменной (так, нет 1;
в конце, и так далее), может быть действительно просто повернуть Ваш %config
это в YAML:
perl -MYAML -le 'print YAML::Dump( { do shift } )' filename
do
возвращает последнюю вещь, которую это оценило, таким образом, в этом небольшом коде это возвращает список пар "ключ-значение" хеша. Вещи, такие как YAML:: Дампу нравится работать со ссылками, таким образом, они получают подсказку о структуре верхнего уровня, таким образом, я превращаю это в ссылку хеша путем окружения do
с фигурными скобками. Для Вашего примера я получил бы этот вывод YAML:
--- (?-xism:^spam): eggs color: red numbers: - 5 - 8
Я не знаю, как Python понравится это stringified regex, все же. У Вас действительно есть ключ, который является regex? Мне было бы любопытно знать, как это используется в качестве части конфигурации.
Если существует дополнительный материал в файле, жизнь немного более жестка. Существует, вероятно, действительно умный способ обойти это, но я использовал ту же идею, но просто трудно кодированный имя переменной, которое я хотел.
Я попробовал это на структуре данных Perl, которую использует модуль CPAN.pm, и похоже, что это вышло прекрасное. Единственное уродство является предвидением имени переменной, которое оно предоставляет. Теперь, когда Вы видели ошибку конфигурации в коде Perl, постарайтесь не делать ту же ошибку с кодом Python.:)
YAML:
perl -MYAML -le 'do shift; print YAML::Dump( $CPAN::Config )' MyConfig.pm
JSON:
perl -MJSON::Any -le 'do shift; my $j = JSON::Any->new; print $j->objToJson( $CPAN::Config )' MyConfig.pm
или
# suggested by JF Sebastian
perl -MJSON -le 'do shift; print to_json( $CPAN::Config )' MyConfig.pm
XML:: Простой не удается так хорошо, потому что это рассматривало все как атрибут, но возможно кто-то может изменить к лучшему это:
perl -MXML::Simple -le 'do shift; print XMLout( $CPAN::Config )' MyConfig.pm