python - 使用flask-sqlalchemy可以插入数据到mysql但是无法读取数据。
PHP中文网
PHP中文网 2017-04-17 15:07:38
[Python讨论组]

我写的demo程序

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.script import Manager,Shell
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:123456@127.0.0.1/hello'
#app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir,'data.sqlite')
manager = Manager(app)
db = SQLAlchemy(app)

class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True)


    def __repr__(self):
        return '<User %r>' % self.username

def make_shell_context():
    return dict(app=app,db=db,User=User)
manager.add_command('shell',Shell(make_context=make_shell_context))

if __name__ == '__main__':
    manager.run()

可以再mysql插入数据,插入之前:
mysql> select * from users;
+------+-------------+---------+
| id | username | role_id |
+------+-------------+---------+
| NULL | yzxu | NULL |
| NULL | dayiguizhen | NULL |
| NULL | yzxu | NULL |
| NULL | yzxu | NULL |
| NULL | yzxu | NULL |
| NULL | yzxu | NULL |
| NULL | yzxu | NULL |
| NULL | yzxu | NULL |
| NULL | yzxu | NULL |
| NULL | yzxu | NULL |
| NULL | yzxu | NULL |
| NULL | yzxu | NULL |
| NULL | test | NULL |
+------+-------------+---------+
13 rows in set (0.00 sec)

yzxu@ubuntu:~/py/github$ python sql.py shell

>>> user = User(username='after')
>>> db.session.add(user)
>>> db.session.commit()

插入成功:
mysql> select * from users;
+------+-------------+---------+
| id | username | role_id |
+------+-------------+---------+
| NULL | yzxu | NULL |
| NULL | dayiguizhen | NULL |
| NULL | yzxu | NULL |
| NULL | yzxu | NULL |
| NULL | yzxu | NULL |
| NULL | yzxu | NULL |
| NULL | yzxu | NULL |
| NULL | yzxu | NULL |
| NULL | yzxu | NULL |
| NULL | yzxu | NULL |
| NULL | yzxu | NULL |
| NULL | yzxu | NULL |
| NULL | test | NULL |
| NULL | after | NULL |
+------+-------------+---------+
14 rows in set (0.00 sec)

但是查询不到东西

>>> User.query.filter_by(username='after').all()
[None]

但是把URI换成SQLite的就可以查询到

>>> db.create_all()
>>> u = User(username='yzxu')
>>> db.session.add(u)
>>> db.session.commit()
>>> User.query.all()
[<User u'yzxu'>]
>>> quit()

是不是把URI换成mysql还有进行一些其他的操作?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(1)
怪我咯

我知道问题出在哪了。
这个users表是我在数据库手动创建的,所以忘记吧id设为主键。如果使用ORM的create_all()方法创建,就可以创建正确的表了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号