Python 连接到Postgres数据库时出现Apache web服务器分段错误
我有一个在apache服务器上运行的python flask web应用程序。flask应用程序只是返回我从postgres数据库获得的值的一个函数Python 连接到Postgres数据库时出现Apache web服务器分段错误,python,linux,postgresql,python-2.7,apache,Python,Linux,Postgresql,Python 2.7,Apache,我有一个在apache服务器上运行的python flask web应用程序。flask应用程序只是返回我从postgres数据库获得的值的一个函数 @app.route('/') def hello_world(): import psycopg2 db_conn_string = ("dbname=" + "xxx" + " user=" + "xxx" + " host=" +
@app.route('/')
def hello_world():
import psycopg2
db_conn_string = ("dbname=" + "xxx"
+ " user=" + "xxx"
+ " host=" + "xxx"
+ " password=" + "xxx")
db_connection = psycopg2.connect(db_conn_string)
cursor = db_connection.cursor()
cursor.execute("SELECT * FROM XXX")
return cursor.fetchall()
当我运行此应用程序时,我会在浏览器上看到:
我检查了/var/log/apache2/error.log下的日志,错误是:
[Fri Jan 24 10:34:34.676561 2020] [core:notice] [pid 15644:tid 139639322680256] AH00051: child pid 15972 exit signal Segmentation fault (11), possible coredump in /etc/apache2
有趣的是,当我将return语句更改为只返回helloworld时,它运行得很好,我没有看到任何错误。因此,我的假设是,错误是由于apache web应用程序试图连接到postgres数据库造成的。我检查了数据库的凭据,没有任何错误。我不知道怎么解决这个问题
EDIT:使用相同代码的测试python程序工作,我能够检索数据。您的视图(即hello\u world
函数)需要返回Flask支持的内容。也许可以看一看,以获得更多的例子
最简单的方法是将其转换为字符串并返回,例如:
import psycopg2
@app.route('/')
def hello_world():
con = psycopg2.connect(db_conn_string)
with con, con.cursor() as cur:
cur.execute("SELECT * from xxx;")
result = cur.fetchall()
return repr(result)
我重新安排了你的代码,使之更为传统。请注意,import
s通常位于顶部。您还需要在顶部将连接字符串设置为常量。使用psycopg2
游标作为上下文管理器也可以很好地将它们包装到事务中,COMMIT
成功时执行回滚
异常时执行回滚在Python测试程序中运行函数时会得到什么结果?@Bodo Yes,使用相同代码的python程序可以工作,我可以连接到数据库并检索数据。cursor.fetchall()
返回元组列表。我猜调用函数不准备处理这种结果。@ArchitVerma请回答您的问题,并在那里添加所有信息,而不是在注释中回答。请显示正在工作的Python程序及其输出。@tripleee我认为这不是问题所在。即使尝试从列表中返回一个值,我也会得到相同的错误。谢谢你的回答Sam!我尝试从列表中只返回一个值,但没有帮助。我不认为问题在于Flask无法理解return语句。如果在Apache之外运行Flask怎么办?i、 e.只需在教程中使用它就可以了。代码本身似乎没有问题。不知何故,当我在apache服务器上运行它时,它会给我一个分段错误。然后可能让apache输出更多的日志信息,以找出实际失败的地方/原因。可能会更新问题以包括相关的配置设置