c++调用python操作mongo
之前嘗試在windows下c++直接調用mongo,但是出現各種問題,后來只好作罷。
現嘗試用c++調用python來操作mongo數據庫,還是有問題,先做一下記錄。
1、python調用mongo
?安裝pymongo
mongoDB.py文件下鏈接數據庫
import pymongoimport sys reload(sys) sys.setdefaultencoding('utf-8')class MongoDB():def __init__(self, collection, db, port=27017, host=XX):self.conn = pymongo.Connection(host, port)self.db = self.conn[db]self.coll = self.db[collection]database.py 文件下書寫:
測試運行成功
2、c++調用python
配置python安裝路徑下的include和libs
注意#include "Python.h"
添加依賴庫? #pragma comment(lib,"python27.lib")
?
/Python 初始化///Py_Initialize(); if (!Py_IsInitialized()){return -1;}// 添加當前路徑// 把輸入的字符串作為Python代碼直接運行,返回0表示成功,-1表示有錯。大多時候錯誤都是因為字符串// 中有語法錯誤。PyRun_SimpleString("import sys");PyRun_SimpleString("sys.path.append('./')");PyObject* pName = NULL;PyObject* pModule =NULL;PyObject* pArgs = NULL;PyObject* pRet = NULL;// 載入名為PyPlugin的腳本pName = PyString_FromString("database");//testpy 沒錯pModule = PyImport_Import(pName);//如果import不對往往是python代碼有問題if (!pModule){printf("can't database.py\n");return -1;}PyObject* pDict = NULL;PyObject* pFunc = NULL;pDict = PyModule_GetDict(pModule);if (!pDict){return -1;}pFunc = PyDict_GetItemString(pDict, "search_video_title_from_md5");if (!pFunc || !PyCallable_Check(pFunc)){printf("can't findfunction [aplus]\n");return -1;}char* videoMD5 = "49a434d98ea49c4f2490528b6587f838"; ///測試用char* videoTitile;PyObject *pReturn = NULL;pReturn = PyObject_CallFunction(pFunc,videoMD5);PyArg_Parse(pReturn, "s", videoTitile); //s表示轉換成char*型變量Py_DECREF(pFunc); Py_Finalize(); cout << videoTitile << endl;
注意此處幾個問題,
(1)?特別說明,如果您是用Python安裝包的形式安裝的Python,那么這個程序只能以Release方式運行!原因是安裝包版Python在libs文件夾下只有Release版的lib文件,而debug模式需要Python27_d.lib,也就是debug模式的。如果您在運行時提示無法打開python27_d.lib文件,那么請換成Release模式,或者下載Python源碼自己編譯,這樣就會生成_d的lib文件了!
(2)注意c++ 工程win32或者x64一定要與python版本相同,同為32位或者64位,不然會出現無法解析的外部符號。
(3)此時運行還會出現這個問題
如果是普通的python函數沒有用過mongo之類的,不會出現此問題,就是import 包的問題。
?不知道此問題如何解決,準備換中方法來進行調用,請看后續博客。
總結
以上是生活随笔為你收集整理的c++调用python操作mongo的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vs2010 unresolved ex
- 下一篇: python读取txt行问题