之前尝试在windows下c++直接调用mongo,但是出现各种问题,后来只好作罢。

现尝试用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++调用python操作mongo相关推荐

  1. python操作mongo(2)

    2019独角兽企业重金招聘Python工程师标准>>> 更新数据 你可以通过调用**update_one()和update_many()**方法来更新集合collection中特定的 ...

  2. python 操作mongo

    1. 导包: import pymongo 2. 建立连接 client = pymongo.MongoClient("127.0.0.1",27017) 3. 获取数据库 db ...

  3. MongoDB的安装到使用 + Python操作MongoDB + 有关系和无关系数据库比较

    day1 - day7 mongoDB学习第一天 数据库 MongoDB (芒果数据库) 数据存储阶段 文件管理阶段 (.txt .doc .xls) 优点 : 数据可以长期保存 可以存储大量的数据 ...

  4. python里pai_关于python如何调用win32pai操作cmd的方法

    下面小编就为大家带来一篇python 调用win32pai 操作cmd的方法.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 实例如下:#coding=utf-8impo ...

  5. python中的pai怎么打_python 调用win32pai 操作cmd的方法

    实例如下: #coding=utf-8 import subprocess from time import * import win32api import win32con import win3 ...

  6. Python操作Excel的Xlwings教程(八)——Excel使用VBA调用Python

    这次推文的主题,在Xlwings中使用VBA的宏来进行Excel的操作. 知识准备 在Xlwings的官方文档中,我寻找到了一个关于Python API的东西.传送门如下: https://docs. ...

  7. python怎么调用navicat_Navicat使用与python操作数据库

    一.Navicat使用 1.测试+链接数据库,新建库 2.新建表,新增字段+类型+约束 3.设计表:外键 4.新建查询 5.建立表模型 二.python操作数据库 pymysql使用步骤: 1.与数据 ...

  8. python 操作微信 群发_python 调用微信 发消息

    本篇文章讲述的是调用 python 的 wxpy 包自动发送微信消息. 相当于 登录 微信网页版. 具体代码方便复制,提供一份文字版代码 #!/usr/bin/env python3 # coding ...

  9. Python 操作 MongoDB

    MongoDB 教程.高级教程:https://www.runoob.com/mongodb/mongodb-tutorial.html 官网:https://www.mongodb.com/ Pym ...

最新文章

  1. Unity3D 材料
  2. 网页 html 全图片排版,HTML5-网页排版划分
  3. ITK:将两个图像与棋盘格图案组合在一起
  4. 公用技术——设计模式19——行为型模式——备忘录模式——待补充
  5. PostCSS自学笔记(二)【番外篇二】
  6. Windows编程—获取Chrome浏览器的安装目录
  7. Spring : BeanDefinition
  8. Python中__init__和self的意义和作用
  9. 冒泡排序最佳情况的时间复杂度,为什么是O(n)
  10. 基于SpringBoot的行影旅行网
  11. [项目实战篇] Emos在线办公小程序--环境搭建
  12. 【WEB前端优化】面试必备
  13. 像模拟人生的 java游戏下载_我的世界1.7.2模拟人生整合包
  14. 计算机网络(棋歌教学网站实验)
  15. python竖线_6.1. re模块搜索时要注意竖线|的使用
  16. 浅谈链表的构建,next到底是什么
  17. 谷歌浏览器翻译插件的安装与使用
  18. vip.163邮箱登录指南,163vip邮箱体验分享
  19. 全球及中国贴片电容行业市场竞争态势及投资风险预测报告2022-2028年
  20. 如何启动单线程实现多线程效果及保证安全?

热门文章

  1. 项目中遇到的Integer问题--转
  2. OpenCMS integration with Spring MVC--reference
  3. jmap查看内存使用情况与生成heapdump--转
  4. 【机器学习】--模型评估指标之混淆矩阵,ROC曲线和AUC面积
  5. Oozie 任务调度
  6. [算法]链表的逆序遍历节点
  7. Apache ZooKeeper - 使用原生的API操作ZK
  8. JVM - CMS深度剖析
  9. 白话Elasticsearch55-数据建模之对每个用户发表的博客进行分组 (Top Hits Aggregation)
  10. JVM-04垃圾收集Garbage Collection(上)【垃圾对象的判定】