| 
									
										
										
										
											2012-12-04 14:49:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | :- use_module(library(python)). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :- use_module(library(lists)). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :- python_import('MySQLdb'). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :- initialization(main). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | main :-  | 
					
						
							|  |  |  | 	python_import(pyx), | 
					
						
							|  |  |  | 	ex(X), | 
					
						
							|  |  |  | 	flush_output, | 
					
						
							|  |  |  | 	fail. | 
					
						
							|  |  |  | main. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ex(open) :- | 
					
						
							|  |  |  | 	connect, | 
					
						
							|  |  |  | % execute SQL query using execute() method. | 
					
						
							|  |  |  |         := $cursor:execute('SELECT VERSION()'), | 
					
						
							|  |  |  | % Fetch a single row using fetchone() method. | 
					
						
							|  |  |  |         Data := cursor:fetchone(_), | 
					
						
							|  |  |  | 	Data = t(Version), | 
					
						
							|  |  |  | 	format( "Database version : ~a~n ", [ Version ]), | 
					
						
							|  |  |  | 	close. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ex(create) :- | 
					
						
							|  |  |  | 	connect, | 
					
						
							|  |  |  | % Drop table if it already exist using execute() method. | 
					
						
							|  |  |  | 	:= $cursor:execute('DROP TABLE IF EXISTS EMPLOYEE'), | 
					
						
							|  |  |  |         % Create table as per requirement | 
					
						
							|  |  |  | 	sql := 'CREATE TABLE EMPLOYEE ( | 
					
						
							|  |  |  |          FIRST_NAME  CHAR(20) NOT NULL, | 
					
						
							|  |  |  |          LAST_NAME  CHAR(20), | 
					
						
							|  |  |  |          AGE INT,   | 
					
						
							|  |  |  |          SEX CHAR(1), | 
					
						
							| 
									
										
										
										
											2012-12-07 08:10:21 +00:00
										 |  |  |          INCOME FLOAT ) DEFAULT charset=utf8', | 
					
						
							| 
									
										
										
										
											2012-12-04 14:49:29 +00:00
										 |  |  | 	:= $cursor:execute($sql), | 
					
						
							|  |  |  | 	close. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ex(insert) :- | 
					
						
							|  |  |  | 	connect, | 
					
						
							|  |  |  | % Prepare SQL query to INSERT a record into the database. | 
					
						
							|  |  |  | 	catch(add, _, rollback),  | 
					
						
							|  |  |  |    	close. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | add :- | 
					
						
							|  |  |  | 	customer(First, Last, Age, Sex, Income), | 
					
						
							|  |  |  | 	format(atom(Sql), 'INSERT INTO EMPLOYEE(FIRST_NAME, | 
					
						
							|  |  |  |          LAST_NAME, AGE, SEX, INCOME) | 
					
						
							|  |  |  |          VALUES (\'~a\', \'~a\', ~d, \'~a\', ~g)', | 
					
						
							|  |  |  | 	 [ First, Last, Age, Sex, Income ]), | 
					
						
							|  |  |  | 	% Execute the SQL command | 
					
						
							|  |  |  | 	:= $cursor:execute(Sql), | 
					
						
							|  |  |  | 	fail. | 
					
						
							|  |  |  | add :-  | 
					
						
							|  |  |  | 	% Commit your changes in the database | 
					
						
							|  |  |  |         := $db:commit(_). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | rollback :- | 
					
						
							|  |  |  | 	:= db:rollback(_). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | connect :- | 
					
						
							|  |  |  | 	db := connect('localhost','testuser','test123','TESTDB' ), | 
					
						
							|  |  |  | 	:= $db:set_character_set('utf8'), | 
					
						
							|  |  |  | % prepare a cursor object using cursor() method | 
					
						
							|  |  |  |         cursor := db:cursor(_), | 
					
						
							|  |  |  | 	:= $cursor:execute('SET NAMES utf8;'), | 
					
						
							|  |  |  | 	:= $cursor:execute('SET CHARACTER SET utf8;'), | 
					
						
							|  |  |  | 	:= $cursor:execute('SET character_set_connection=utf8;'). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | close :- | 
					
						
							|  |  |  | % disconnect from server | 
					
						
							|  |  |  | 	:= db:close(_). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % Open database connection | 
					
						
							|  |  |  | ex(read) :- | 
					
						
							|  |  |  | 	connect, | 
					
						
							|  |  |  | % Prepare SQL query to SELECT a record from the database. | 
					
						
							|  |  |  | 	sql := 'SELECT * FROM EMPLOYEE \ | 
					
						
							|  |  |  |                WHERE INCOME > 1000', | 
					
						
							|  |  |  | 	catch(try, _, except), | 
					
						
							|  |  |  | 	close. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | try:- | 
					
						
							|  |  |  |    % Execute the SQL command | 
					
						
							|  |  |  | 	:= $cursor:execute($sql), | 
					
						
							|  |  |  |    % Fetch all the rows in a list of lists. | 
					
						
							|  |  |  | 	Results := $cursor:fetchall(_), | 
					
						
							|  |  |  | 	Results =.. [_|LResults], | 
					
						
							|  |  |  | 	member(t(Fname, Lname, Age, Sex, Income), LResults), | 
					
						
							|  |  |  |       % Now print fetched result | 
					
						
							|  |  |  | 	format("fname=~a, lname=~a, age=~d, sex=~a, income=~g~n", | 
					
						
							|  |  |  |     [Fname, Lname, Age, Sex, Income ]), | 
					
						
							|  |  |  | 	fail. | 
					
						
							|  |  |  | try. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | except:- | 
					
						
							|  |  |  |    format('Error: unable to fecth data', []). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | % disconnect from server | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | customer('João', 'Matos', 40, 'M', 2000). | 
					
						
							|  |  |  | customer('Maria', 'Söderling', 20, 'F', 3000). | 
					
						
							| 
									
										
										
										
											2012-12-07 08:10:21 +00:00
										 |  |  | customer('毛', '泽东', 44, 'M', 500). | 
					
						
							|  |  |  | customer('রবীন্দ্রনাথ', 'ঠাকুর', 30, 'M', 8000). |