我有一个在apache服务器上运行的python flask网络应用。 flask应用程序只是一个函数,它返回从postgres数据库获得的值。
@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语句更改为仅返回一个hello world时,它运行得很好,并且看不到任何错误。因此,我的假设是该错误是由于apache Web应用程序试图连接到postgres数据库所致。我检查了数据库的凭据,那里没有错误。我不知道该如何解决。
编辑:具有相同代码的测试python程序可以工作,并且我能够检索数据。
答案 0 :(得分:0)
您的视图(即hello_world
函数)需要返回Flask支持的内容。也许看看Flask tutorial on Views以获得更多示例
最简单的方法是将其转换为字符串并返回,例如:
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
通常位于顶部。您还希望使连接字符串在顶部成为常量。使用psycopg2
游标作为上下文管理器还可以将它们很好地包装在事务中,COMMIT
成功执行,而ROLLBACK
执行异常操作