sqlalchemy显示与os.getenv()相关的错误

时间:2018-07-18 05:11:10

标签: flask sqlalchemy

我正在研究 sqlalchemy ,并且引擎中有命令-  create_engine(os.getenv("DATABASE_URL"))

当我运行程序时,它显示错误消息-

  

“无法从字符串'C:\ Program Files \ PostgreSQL \ 10 \ data解析rfc1738 URL”

代码

import os

from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker

#engine = create_engine('sqlite://')
engine = create_engine(os.getenv("DATABASE_URL"))
db = scoped_session(sessionmaker(bind=engine))

def main():
  flights = db.execute("SELECT origin, destinaiton, duration FROM      flights").fetchall()
  for flights in flights:
    print(f"{flight.origin} to {flight.destination}, {flight.duration} minutes.")

if __name__ == "__main__":
  main()

错误

  

回溯(最近一次通话最后一次):文件“ list.py”,第7行,在          引擎= create_engine(os.getenv(“ DATABASE_URL”))文件“ C:\ Users \ Amber   Bhanarkar \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ sqlalchemy \ engine__init __。py“,   第424行,位于create_engine中       返回strategy.create(* args,** kwargs)文件“ C:\ Users \ Amber Bhanarkar \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ sqlalchemy \ engine \ strategies.py”,   第50行,在创建中       u = url.make_url(name_or_url)文件“ C:\ Users \ Amber Bhanarkar \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ sqlalchemy \ engine \ url.py”,   第211行,在make_url中       返回_parse_rfc1738_args(name_or_url)文件“ C:\ Users \ Amber Bhanarkar \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ sqlalchemy \ engine \ url.py”,   _parse_rfc1738_args中的第270行       “无法解析来自字符串'%s'的rfc1738 URL”%名称)sqlalchemy.exc.ArgumentError:无法解析来自字符串的rfc1738 URL   'C:\ Program Files \ PostgreSQL \ 10 \ data'

请有人帮我解决这个问题。

3 个答案:

答案 0 :(得分:2)

引擎URL不应是本地Postgres安装的路径,而应是一个告诉SQLAlchemy如何连接数据库的字符串。它具有以下格式:

<form [formGroup]="form" (ngSubmit)="submit()">
  <label formArrayName="mobile" *ngFor="let order of form.controls.mobile.contols; let i = index">
    <input type="text" [formControlName]="i">
    {{mobile[i] }}
  </label>

</form>

答案 1 :(得分:0)

我现在也在看CS50的课程视频。您应该尝试只使用create_engine("your_database_url")

如果您仍然想使用create_engine(os.getenv("DATABASE_URL")) tp进程,请确保可以使用像psql $DATABASE_URL这样的命令行登录。

答案 2 :(得分:0)

使用psql $DATABASE_URL对我有用,但我在create_engine("your_database_url")上仍然遇到相同的错误

(project1) C:\Users\Gregory Goufan\Downloads\CS50s Web Programming with Python and JavaScript\project1\project1\project1>psql postgresql://openpg:openpgpwd@localhost:5432/postgres
psql (9.5.8)
WARNING: Console code page (437) differs from Windows code page (1252)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.
Type "help" for help.

postgres=#

但是,确实可以通过将URL直接放入create_engine函数中来实现奇怪的事情,因为它确实是返回的字符串

sqlalchemy.exc.ArgumentError: Could not parse rfc1738 URL from string ' 'postgresql://openpg:openpgpwd@localhost:5432/postgres''
相关问题