我尝试在python脚本中使用psycog2。
我在db.py
文件中有一个get_db()
函数(我需要在sqlite和psql之间进行选择(:
def get_db():
if 'db' not in g:
info_db = getDatabaseType()
if info_db['type'] != 'pgsql': # If wrong type is setup, use sqlite by default
g.db = sqlite3.connect(
current_app.config['DATABASE'],
detect_types=sqlite3.PARSE_DECLTYPES
)
g.db.row_factory = sqlite3.Row
else:
conn = psycopg2.connect(
"dbname=" + info_db['db'] +
" user=" + info_db['user'] +
" password=" + info_db['pwd'])
conn.autocommit = True
g.db = conn.cursor()
return g.db
这是在auth.py
文件(与db.py
级别相同(中进行选择的代码:
def load_logged_in_user():
user_id = session.get('user_id')
if user_id is None:
g.user = None
else:
db = get_db()
tes = db.execute('SELECT * FROM users')
users = tes.fetchall()
我有以下错误:
AttributeError: 'NoneType' object has no attribute 'fetchall'
如果我在db.py
文件中执行相同的命令,它就会工作。
有什么想法吗?
提前感谢
问题就在这里:
tes = db.execute('SELECT * FROM users')
users = tes.fetchall()
db.execute
返回None,以分配给tes
。
你需要做:
db.execute('SELECT * FROM users')
users = db.fetchall()
光标执行命令,然后从光标中提取。