LINUX.ORG.RU

python + pgdb


0

0

Народ, вот такой код коннектится нормально, а запрос не обрабатывает:


import pgdb
import string

class databaseapi:
	def __init__(self, dsn, user, password):
		self.dsn = dsn
		self.user = user
		self.password = password
		self.database = pgdb.connect (self.dsn, self.user, self.password)
		self.disconnect()
		
	def connect(self):
		try:
			self.database = pgdb.connect (self.dsn, self.user, self.password)
		except:
			self.database = None  

	# Close a database connection
	def disconnect(self):
		if self.database != None:
			self.database.close()
			
	def querry(self, querrystring):
		querrystring = string.lower(querrystring)
		print querrystring,'\n'
		try:
			self.database = pgdb.connect (self.dsn, self.user, self.password)
			cursor = self.database.cursor()
			cursor.execute(querrystring)
			self.database.close()
			
			return cursor.fetchall()
		except:
			self.database.rollback()
			return 'querry fehlgeschlagen'


database = databaseapi('127.0.0.1:gws','gws','apass4me')
a = database.querry('''
CREATE TABLE tester_1
	(id INT NOT NULL,
	name CHAR(50));
''')
print 'ok' 

> self.database = pgdb.connect (self.dsn, self.user, self.password)

> self.disconnect()

так и должно быть? ты уверен что после self.disconnect() ты сможешь выполнить query?

кстати query пишется с одной r

lg ★★
()
Ответ на: комментарий от lg

В процедуре querry я соединяюсь с базой опять. __init__ в данном случае только проверяет возможность контакта. queRRy - в других модулях, которые я подгружаю уже есть query. По существу вопроса есть предложения? Или примерчик, буду очень признателен

stiner_rd
() автор топика

Python DB API определяет, что автокоммит должен быть выключен. А в pg /-:в отличии от всяких Ораклов:-/ create table вполне себе откатываемая транзакция. Потому вместо self.database.close() должно быть commit. И я не уверен в возможностях cursor после close().

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

Спасибо, уже разобрался. Вот так все работает:

import pgdb
import string

class databaseapi:
	def __init__(self, dsn, user, password):
		self.dsn = dsn
		self.user = user
		self.password = password
		self.database = pgdb.connect (self.dsn, self.user, self.password)
		self.disconnect()
		
	def connect(self):
		try:
			self.database = pgdb.connect (self.dsn, self.user, self.password)
		except:
			self.database = None  

	# Close a database connection
	def disconnect(self):
		if self.database != None:
			self.database.close()
			
	def aktion(self, aktionstring):
		aktionstring = string.lower(aktionstring)
		print aktionstring,'\n'
		try:
			self.connect()
			cursor = self.database.cursor()
			cursor.execute(aktionstring)
			self.database.commit()
			cursor.close ()
			self.disconnect()
			return 'ok'
		except:
			self.database.rollback()
			return 'fehlgeschlagen'
			
	def query(self, querystring):
		querystring = string.lower(querystring)
		print querystring,'\n'
		try:
			self.connect()
			cursor = self.database.cursor()
			cursor.execute(querystring)
			res_ = cursor.fetchall ()
			self.database.commit()
			cursor.close ()
			self.disconnect()
			return res_
		except:
			return 'fehlgeschlagen'


database = databaseapi('127.0.0.1:gws','gws','apass4me')
#a = database.query("create table players (name varchar(20), team varchar(50))")
#a = database.query('drop table players')

a = database.query('select * from players')
print a
a = database.aktion("insert into players values ('Michael Jordan','Washington Wizards')")
print '--'
a = database.query('select * from players')
print a

print 'ok' 

stiner_rd
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.