用于create_engine()的密码斜杠的SQLAlchemy ValueError

时间:2013-03-31 09:58:31

标签: python escaping sqlalchemy

相当简单的问题:我的Python脚本正在尝试创建SQLAlchemy数据库连接。密码包含正斜杠:

engineString = 'postgresql://wberg:pass/word@localhost/mydatabase'
engine = sqlalchemy.create_engine(engineString)

但第二行提出:

ValueError: invalid literal for int() with base 10: 'pass'

使用原始字符串(前缀为'r')无济于事。有没有办法让SQLAlchemy接受该密码?我通常的下一步是尝试使用从属方法构建连接,但我看不到在doc中建立连接的另一种方法。我不允许在这里使用带斜线的密码吗?我可以适应这一点,但似乎不太可能在没有该功能的情况下工具包可以实现这一点。

版本:Python 2.6.6,SQLAlchemy 0.8.0

1 个答案:

答案 0 :(得分:2)

斜杠不是URL组件字符串的有效字符。您需要对连接字符串的密码部分进行URL编码:

from urllib import quote_plus as urlquote
from sqlalchemy.engine import create_engine
engineString = 'postgresql://wberg:%s@localhost/mydatabase' % urlquote('pass/word')
engine = create_engine(engineString)