如何在Laravel 5.6中导入Python数据库配置文件
解决Python从配置文件导入数据库连接配置的问题
看起来你遇到的核心问题是配置文件的结构设计不对,导致无法正确复用数据库连接配置。原来的代码里直接在config.py创建了连接对象,但导入后的调用方式有误,咱们一步步来修正:
第一步:重构配置文件,分离配置参数
首先修改config.py,把数据库的连接参数单独作为变量存储,而不是直接创建连接。这样Laravel可以很方便地动态写入这些参数:
# config.py # 这些参数可以由Laravel动态生成写入 DB_HOST = "localhost" DB_USER = "root" DB_PASS = "root" DB_NAME = "your_target_database" # 要插入数据的目标数据库名
第二步:在业务代码中使用配置参数创建连接
然后修改file.py,导入这些配置参数,再创建数据库连接。这样代码结构更清晰,也能正确复用配置:
# file.py import pymysql import csv # 从配置文件导入参数 from config import DB_HOST, DB_USER, DB_PASS, DB_NAME # 使用配置参数创建数据库连接 db_connection = pymysql.connect( host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_NAME # 这里直接指定数据库,后续SQL不用再加`dbname.`前缀 ) cursor = db_connection.cursor() csv_data = csv.reader(open('v.csv')) next(csv_data) # 跳过CSV表头 try: # 批量插入数据,加入异常处理确保数据一致性 for row in csv_data: cursor.execute( 'INSERT INTO tablename(fields1, field2, ...) VALUES(%s, %s, %s, %s, %s, %s)', row ) db_connection.commit() print("数据插入成功!") except Exception as e: # 插入失败时回滚事务,避免脏数据 db_connection.rollback() print(f"插入出错,已回滚:{str(e)}") finally: # 无论成功失败,都要关闭游标和连接 cursor.close() db_connection.close()
为什么原来的代码无法运行?
你原来的config.py直接创建了db连接对象,但在file.py里import config as db后,db是整个模块对象,而不是你创建的连接实例。模块本身没有cursor()方法,所以调用db.cursor()会报错。把配置参数和连接逻辑分离后,就能避免这个问题。
第三步:让Laravel动态生成配置文件
Laravel可以通过文件写入功能,从自身的.env配置中读取数据库信息,动态生成config.py。示例PHP代码如下:
// 在Laravel的控制器或自定义命令中执行 $configPath = base_path('path/to/your/config.py'); // 替换成你的config.py实际路径 $configContent = <<<PYTHON DB_HOST = "{$_ENV['DB_HOST']}" DB_USER = "{$_ENV['DB_USER']}" DB_PASS = "{$_ENV['DB_PASSWORD']}" DB_NAME = "{$_ENV['DB_DATABASE']}" PYTHON; // 写入配置文件 file_put_contents($configPath, $configContent);
这样每次Laravel的数据库配置变动时,只要重新生成config.py,Python代码就能自动使用最新的配置了。
额外注意事项
- 确保
config.py和file.py在同一目录下,或者把config.py所在目录加入Python的sys.path中,避免导入失败 - 给
config.py设置合适的文件权限,确保Laravel能写入,Python能读取 - 加入异常处理很重要,能避免数据库连接失败、插入错误时导致的数据不一致问题
内容的提问来源于stack exchange,提问作者Sree Kanth
相关产品推荐
相关产品推荐

