встраивание Python и SQLite в C ++ - PullRequest
       8

встраивание Python и SQLite в C ++

0 голосов
/ 16 октября 2018

Из-за моего проекта мне нужно загрузить и выполнить код Python из кода C ++.Если вы передаете строку в качестве параметра в коде C ++, вы должны вызвать sqlite в Python и вернуть результат поиска в БД в C ++.

Если вы запускаете здесь только код Python, онработает отлично.Если вы запускаете его в C ++, он возвращает ошибку, что не может найти таблицу в файле БД.

это код 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;
}

Мне нужна ваша помощь.Спасибо.

...