107 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Prolog
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Prolog
		
	
	
	
	
	
 | 
						|
:- 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),
 | 
						|
         INCOME FLOAT ) DEFAULT charset=utf8',
 | 
						|
	:= $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).
 | 
						|
customer('毛', '泽东', 44, 'M', 500).
 | 
						|
customer('রবীন্দ্রনাথ', 'ঠাকুর', 30, 'M', 8000).
 |