c++调用python操作mongo
2013-10-11 11:30
274 查看
之前尝试在windows下c++直接调用mongo,但是出现各种问题,后来只好作罢。
现尝试用c++调用python来操作mongo数据库,还是有问题,先做一下记录。
1、python调用mongo
安装pymongo
mongoDB.py文件下链接数据库
database.py 文件下书写:
测试运行成功
2、c++调用python
配置python安装路径下的include和libs
注意#include "Python.h"
添加依赖库 #pragma comment(lib,"python27.lib")
注意此处几个问题,
(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数据库,还是有问题,先做一下记录。
1、python调用mongo
安装pymongo
mongoDB.py文件下链接数据库
import pymongo import 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 None title = 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,C++代码中调用python脚本
- C++调用Python浅析
- c++ 调用 python 实例 涉及 类 多参数 列表作为参数
- Python调用c/c++
- python调用c/c++方式示例(修改整理)
- python调用C++ 可执行程序并传递参数
- python 调用win32pai 操作cmd的方法
- C++调用Python函数并传入传出参数
- 如何让python调用C和C++代码
- c++调用python
- Python调用ArcGIS操作
- c++中调用python脚本提示 error LNK2001: 无法解析的外部符号 __imp_Py_Initialize等错误的解决方法
- C# 调用 C++ DLL 操作说明
- 使用boost实现python调用c++
- 一个玩笑,c++调用python
- 手写选择题识别-c++线上调用 线下python跑出的tensorflow模型-占坑
- centos中使用swig实现python调用c++
- Python常用模块种类的系统介绍及与操作系统相关的调用和操作
- c++调用python(复杂版)
- python操作mongo