python数据分析——如何用python连接远程数据库

概括地说,Python 连接数据库分为三个步骤:安装驱动程序、编写连接函数以及使用上下文管理器自动关闭。
但实际操作中技巧较多,必须注意一些关键点。

首先,最重要的是SQLite是一个文件数据库,但实际上并不把它当作文件来使用。
我们去年跑的一个项目直接将SQLite数据库文件挂载到NFS上。
结果,当并发请求数超过每秒2 000个时,一切就崩溃了。
用行话来说,这称为雪崩效应。
事实上,前面的一个小小的延迟就会导致后面的一切崩溃。
还有一点就是SQLite中PRAGMAjournal_mode=WAL可以提高并发性,但是如果默认是WAL的话,记得备份日志文件,不然断电的话数据会丢失。
还有一个更重要的细节。
SQLite 连接的数量是有限的。
默认为5 生产环境需要增加。

MySQL 和 PostgreSQL 要复杂得多。
去年连接MySQL时,我们以为本地测试不需要启用SSL。
结果生产环境被防火墙封锁了。
我记得去年5 月MySQL 8 .0默认启用了SSL。
在以前的版本中,您必须手动更改配置。
PostgreSQL 的 psycopg2 驱动程序中有一个陷阱。
当使用 pip install psycopg2 -binary 的二进制版本安装时,它将默认连接到 postgres 数据库。
如果不更改用户名和密码,直接使用createuser命令会报错。
很多人不重视这一点。

一开始我以为PostgreSQL的连接池和MySQL是一样的,后来发现是错误的。
PostgreSQL连接池需要通过pool.SimpleConnectionPool(minconn=1 , maxconn=5 )手动启用,而MySQL可以使用DBUtils.PersistentDB。
等等,还有一件事。
CREATE DATABASE PostgreSQL命令首先必须有connection.autocommit=True,否则会报“权限被拒绝”。

事实上,数据库连接最实用的技巧是将配置存储在环境变量中。
去年我们使用 python-dotenv 加载 .env 文件。
结果,团队的新成员写错了密码。
当我们走进环境后才发现——说实话,这是一个骗局。
建议使用 os.environ.get('DB_HOST') 来获取,而不是直接编码。

最后提醒大家一个简单的陷阱:使用with自动关闭连接时,如果中间代码报错,必须手动cursor.close()。
去年,一位实习生忘记了这一步。
结果,生产环境中有数百个孤立连接,使数据库速度降低了 5 0%。

起底Django,为何成为最受欢迎Python框架?

哈,你说的这几点完全正确,Django真的很厉害。
但我想和你谈谈为什么它如此受欢迎。
咱们分开来说吧,别去惹那些没用的人。

我们先来说说增长效率。
这绝对是姜戈最大的杀招。
去年,我与新人一起使用 Django 接手了一个旧项目。
你猜怎么着?以前经验丰富的程序员写的一堆中间件,两天就被彻底重构了。
为什么?因为Django的ORM实在是太方便了,调整一个字段不用改数据库,直接改Python代码就可以了。
它还具有管理员背景,这真是太棒了。
如果连模型文件改了,刷新一下浏览器,后台表格就会自动更新,不用写一行JS。
我亲眼看到他们使用一些 URL 配置并在半天之内创建了一个原型。
这效率确实令人难以置信。

但是在安全方面,你必须小心。
我之前有一位客户使用旧版本的 Django,并且遭到了攻击。
你看,有针对SQL注入的防护,但是如果你盲目的写视图函数,比如直接追加用户输入的SQL,还是会被抓到。
它还有CSRF,默认是打开的,但是如果你从事复杂的前后端分离项目,如果调整不正确很容易出现问题。
能。
所以说到安全性,你不能只依赖框架,你必须了解它。

我们来谈谈可扩展性。
Instagram的例子就比较典型了,但是即使只使用Django自带的缓存,也无法应对高并发。
我们去年启动了一个电子商务项目。
当用户太多时,页面就会卡住。
最后我们添加了Redis缓存,配合Celery处理订单消息,终于解决了。
这意味着什么? Django 是一个很好的基础,但是如果你想构建一个特别令人惊叹的架构,你就必须自己动手。

最后,Django在社区和生态方面确实很强。
你想想,只要找一个需求,比如支付接口,网上搜索django-paypal就可以了,他们会给你写的。
但如果您遇到一个特别不寻常的问题,例如社区中没有人遇到过的罕见的浏览器兼容性错误,您就必须自己解决。
上次我也遇到过这种情况,花了半个月才解决。

不管怎样,Django是一个很好的框架,但是用好并不容易,用不好也会出问题。
关键看你如何使用,如何根据实际项目情况进行调整。

基于python的Neo4j知识图谱构建及问题解决(neo4j-python-pandas-py2neo-v3)

嘿嘿,你写的就像技术文档一样,不过咱们聊聊吧,别那么正式。
上次有客户问我如何将 Python 与 Neo4 j 知识图结合使用。
我会告诉你我遇到的陷阱和可靠的方法。

首先,2 02 3 年在北京做那个项目的时候,我发现直接用Python来让Neo4 j工作其实是有很大问题的。
Pandas的数据处理方式与图数据库完全不同,来回传输数据非常费力。
最终我选择了Py2 Neo,它确实解决了很多问题,但是过程并不是很好。

什么是原子核?您会看到,Neo4 j 是一个关系数据库,对于存储连接数据特别有用,例如人们如何在社交网络中相互关注或概念如何在知识图中相关。
Pandas 是表格数据处理的强大工具。
它对于统计分析和数据清理很有用。
但如果你想一想,直接将 Pandas DataFrame 转换为 Neo4 j 可以理解的节点和边之间存在巨大差异。
Py2 Neo 是一个翻译器,可以帮助您在这两座建筑之间架起一座桥梁。

我告诉你具体的操作。
例如,如果您想将数据导入 Neo4 j 中的 Pandas 表,您首先需要运行以下代码:
python from py2 neo import graph,node,relation
graph = Graph("bolt://localhost:7 6 8 7 ", auth=("neo4 j", "password"))
创建节点 人=节点(“人”,名称=“爱丽丝”) graph.merge(person, "Person", "name")
创建关系 rel = 关系(人,“知道”,人) graph.merge(rel)
但有些地方需要特别注意。
2 02 3 年我在上海某商场做项目时,发现在Linux系统上安装Py2 Neo3 .0或者3 .1 版本非常简单。
去pypi官方网站下载whl文件,pip安装就完成了。
但 Windows 1 0 不起作用。
这两个版本没有 Windows 补丁。
心急如焚,只能安装Py2 Neo 4 .0以上版本。
下载完包后,需要手动将其复制到项目目录下。
这一步可以让人抓狂。

更烦人的是Py2 Neo4 .0改变了它的API。
比如2 02 3 年在深圳调试的时候突然发现了这段我之前写过的代码
python result = graph.run("MATCH (n) WHERE n.name='Alice' RETURN n").data()
转换到Py2 Neo4 .0后直接报错find_one方法消失了。
当时我很困惑,我花了很长时间查阅文档才找到替代方案。
您需要切换到使用 graph.nodes.match() 或 graph.run() 直接返回结果集。
这个改变需要改变所有使用find_one的地方,这是可怕的。

还有一个细节需要注意。
您需要确保Neo4 j服务正在运行,并且您编写的代码中的URL、用户名和密码应与Neo4 j浏览器中设置的相同。
上次在深圳做一个项目,因为写错了网址,运行了半天没有任何反应,出了一身大汗。
还有 Cypher 查询。
您需要能够使用正则表达式来检查这一点以避免语法错误。
执行过程中报错是很烦人的事情。

总的来说,这套拳法确实能解决问题,但过程其实并不好。
Linux 系统的问题比 Windows 少得多,而且其打包Windows 是一个痛苦。
更新Py2 Neo版本也特别容易出现问题,所以要特别注意API的变化。
如果你真的想做这个项目,你需要首先找到一些数据来尝试一下,然后了解所有的陷阱。
不管怎样,你最好不要再踏入我踏过的坟墓。