0
点赞
收藏
分享

微信扫一扫

SQLAlchemy基本操作

凌得涂 2022-04-23 阅读 69
flask
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
HOSTNAME = '127.0.0.1'
PORT     = '3306'
DATABASE = 'xxxxx'
USERNAME = 'root'
PASSWORD = 'xxxxx'
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)
app.config['SQLALCHEMY_DATABASE_URI']=DB_URI
db = SQLAlchemy(app)
migrate=Migrate(app,db) 
#定义orm模型
class User(db.Model):
    __tablename__ = "user"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)  # 主键和自增
    username=db.Column(db.String(200),nullable=False)
#与user是一对一的关系
class UserExtension(db.Model):
    __tablename__ = "user_extension"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)  # 主键和自增
    school=db.Column(db.String(100))
    user_id=db.Column(db.Integer,db.ForeignKey("user.id"))
    #1在反向引用的时候,如果需要传递一些其他的参数,那么就需要这个函数,否则不需要使用,只要在
    #relationship的backref上,设置反向引用的名称就可以了
    #2userlist=false:代表反向引用的时候,不是一个列表,而是一个对象
    user=db.relationship("User",backref=db.backref("extension",uselist=False))

class Article(db.Model):
    __tablename__="article"
    id =db.Column(db.Integer,primary_key=True,autoincrement=True)#主键和自增
    title=db.Column(db.String(200),nullable=False)#是否为空
    content=db.Column(db.Text,nullable=False)
    #外键:1外键的数据类型要看引用位置的数据类型
    #2,外键一定是通过db.Foreignkey(xxx)
    #3.外键是属于数据库层面的,不推荐直接在orm中使用
    author_id=db.Column(db.Integer,db.ForeignKey("user.id"))
    #用relationship
    #第一个参数是模型的名字
    #第二个参数是backref(back reference):代表反向引用,代表对方访问我的时候的字段名称
    author=db.relationship("User",backref="articles")#user与外键所处的数据库名一致,backref反向引用
#创建表,暂时没有orm数据库的迁移,所以只能先删除所有的表,再创建
# db.drop_all()
# db.create_all()

@app.route("/1-1n")
def one_to_many():
    article=Article(title="111",content="xxx")
    user=User(username="ljy")
    article.author=user
    db.session.add(article)
    db.session.commit()
    print(user.articles)#backref访问作文的文章
    return "1-1ok"
@app.route("/1-1")
def one_to_one():
    user=User(username="ljy1")
    extension=UserExtension(school="温州医科")
    user.extension=extension
    db.session.add(user)
    db.session.commit()
    return "one=to=one"

@app.route("/article")
def article_view():
    # #1.添加数据
    # #insert table article values(xx)
    # article=Article(title="钢铁是怎样炼成的",content="保尔")
    # db.session.add(article)
    # #做一个提交操作
    # db.session.commit()
    # #2查询数据
    # #filter_by:返回一个类列表的对象,取零操作和操作列表一样
    # article=Article.query.filter_by(id=1)[0]
    # print(article.title)
    #3修改数据
    # article = Article.query.filter_by(id=1)[0]
    # article.content="yyy"
    # db.session.commit()
    # print(article.content)
    #4 删除数据
    # Article.query.filter_by(id=2).delete()
    # db.session.commit()


    return "数据操作成功"




@app.route('/')
def hello_world():
    #验证是否成功

    engine=db.get_engine()
    with engine.connect() as conn:
       result=conn.execute("select 1")
       print(result.fetchone())

    return 'Hello World!'


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

举报

相关推荐

0 条评论