日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

c++调用python操作mongo

發布時間:2025/3/21 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 文件下書寫:

# -*- coding: utf-8 -*-import pymongo from mongoDB import *import sys reload(sys) sys.setdefaultencoding('utf-8')def search_video_title_from_md5(video_md5):mdb = MongoDB('video_baidu')dct = mdb.coll.find_one({"md5":video_md5},{'ti':1})if dct == None:return Nonetitle = dct['ti']return title if __name__ == '__main__':title = search_video_title_from_md5("49a434d98ea49c4f2490528b6587f838")print title

測試運行成功

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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。