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).
|