mysqldb interface vs Prolog

This commit is contained in:
Vitor Santos Costa 2012-12-04 14:49:29 +00:00
parent 36ae500118
commit a813a13412
1 changed files with 106 additions and 0 deletions

View File

@ -0,0 +1,106 @@
:- 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 )',
:= $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).