[英]Retrieve data from MySQL to Prolog knowledge base?
有没有办法从MySQL检索数据到Prolog知识库?
我试图检索例如以下字段: Name
和price
从MySQL数据库中的桌子chair
到Prolog知识库),而不是在Prolog中声明它们。
@Boris的评论很有趣。 假设有一个发出shell命令并获取输出流的内置函数(在SWI-Prolog中,我们可以使用library( process )),这是一个从MySQL查询Wordpress表的简单接口
query(USER, PWD, DB, QUERY, Columns, Rows) :-
atom_concat('-p', PWD, PPWD),
process_create(path(mysql), ['-u', USER, PPWD, '-D', DB, '-e', QUERY], [stdout(pipe(Out)),stderr(std)]),
read_record(Out, Columns),
read_records(Out, Rows).
read_record(Out, Fields) :-
read_line_to_codes(Out, Codes),
Codes \= end_of_file,
atom_codes(Line, Codes),
atomic_list_concat(Fields, '\t', Line).
read_records(Out, [Record|Rs]) :-
read_record(Out, Record),
!, read_records(Out, Rs).
read_records(Out, []) :-
close(Out).
测试运行:
test_query :-
query('------','-----',a_blog,"select * from wp_options limit 10", Cols,Rows),
writeln(columns:Cols),
maplist(writeln, Rows).
产量
?- test_query.
columns:[option_id,option_name,option_value,autoload]
[1,siteurl,http://localhost/a_blog,yes]
[2,home,http://localhost/a_blog,yes]
[3,blogname,a blog,yes]
[4,blogdescription,Just another WordPress site,yes]
[5,users_can_register,0,yes]
...
true.
因此,只需声明以下记录即可,而不是显示它们:
capture_table(USER, PWD, DB, QUERY, Functor) :-
query(USER, PWD, DB, QUERY, _Columns, Rows),
maplist(capture_table(Functor), Rows).
capture_table(Functor, Row) :-
Clause =.. [Functor|Row],
assertz(Clause).
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.