将python和sqlite嵌入到c ++

时间:2018-10-16 09:57:08

标签: c++ python-3.x sqlite

由于我的项目,我需要从C ++代码加载并执行Python代码。如果在C ++代码中将字符串作为参数传递,则必须在Python中调用sqlite并将DB中的搜索结果返回给C ++。

如果您仅在此处运行Python代码,则可以正常运行。如果您使用C ++运行它,它将返回错误,表明它无法在DB文件中找到该表。

这是python代码。

#-*- coding: utf-8 -*-
import sqlite3

def jsonparsing(recog_test, keyword):
    db_path = "../test.db"
    conn = sqlite3.connect(db_path)
    cur = conn.cursor()
    sql = "select * from test_table where key=?"

    resultdic = {}

    for keyword in key_list:
        cur.execute(sql, [keyword])
        rows = cur.fetchall()
        resultdic[rows[0][2]] = rows[0][1]

    return str(sttdic)

这是C ++代码。

Retrieval retrieval_obj;
PyObject *pModule;
using json = nlohmann::json;

void Init_PY(){
    Py_Initialize();
    if (!Py_Initialize){
        cout << "Failed Python Initialized" << endl;
        PyErr_Print();
        Py_Finalize();
        exit(1);
    }
    PyRun_SimpleString("import sys\nsys.path.append('./src/')\n");
    pModule = PyImport_ImportModule("pyjson");
    if(!pModule){
        cout << "Failed Python Module Import..." << endl;
        PyErr_Print();
        Py_Finalize();
        exit(1);
    }
}



string parse(const string &recog_text, const string text){
    string parse_result;

    PyObject *pFunc = PyObject_GetAttrString(pModule, "parsing");
    if (pFunc && PyCallable_Check(pFunc)){
        PyObject *result = PyObject_CallFunction(pFunc, "ss",     recog_text.c_str(), text.c_str());
        if (result) {
            PyObject *py_str = PyUnicode_AsEncodedString(result, "utf-8",     "");
            string result_str(PyBytes_AS_STRING(py_str));
            parse_result = result_str;
            Py_XDECREF(py_str);
            Py_XDECREF(result);
        }
        else{
            cout << "Failed Python Running..." << endl;
            PyErr_Print();
            Py_Finalize();
            exit(1);
    }
    }
    else{
        cout << "Failed Python Function Calling...." << endl;
        PyErr_Print();
        Py_Finalize();
        exit(1);
    }
    Py_XDECREF(pFunc);
    return parse_result;
}

我需要你的帮助。谢谢。

0 个答案:

没有答案