Python系列之MySQL--01.基础知识


1.安装Python

下载地址:www.python.com

安装之后测试安装成功的方法:

打开命令行窗口,输入python命令后,回车之后会显示Python版本等信息,此时说明安装成功

2.安装依赖


Python-mysql安装

Pip install mysql-client

Pip地址:
https://pypi.python.org/pypi/mysqlclient/

Windows无法安装时使用网址:
https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient

注意:下载与自己本机系统相对应的python和client版本
依赖安装成功测试方法:打开cmd命令行,输入命令python,回车,然后继续输入命令import MySQLdb,再回车,如果不显示任何信息的话就表明依赖安装成功了

3,Python连接数据库


首先要导包

然后用包里的静态方法填写相关的数据库信息(主机地址,用户名,密码,数据库名,端口号等)

然后建立连接

设计SQL语句

使用连接获得游标(这里的游标是Python连接数据库对象中一个特殊的东西,就像一 个中间人的角色,可以指使它帮你做一些你想做的事情)

利用游标的execute方法执行SQL语句并获得返回的结果。

关闭连接

对于连接过程中可能出现的异常要进行处理

整个的SQL连接数据库的过程结束

import MySQLdb

con = MySQLdb.connect(
    host='127.0.0.1',
    user='root',
    passwd='',
    port=3308,
    db='news',
    charset='utf8'
    )

cursor = con.cursor()
cursor.execute('SELECT * FROM `news`')
rest = cursor.fetchone()
print(rest)

4.对象关系映射


对象关系映射框架SQLALchemy安装:

安装命令:pip install SQLALchemy

检查是否安装成功的方法:

打开cmd窗口,进入python环境,敲入import sqlalchemy命令回车,

如果不报错,然后输入sqlalchemy.version能查询到版本号说明安装成功。

5.Flask入门


安装flask

打开cmd窗口

输入pip install flask

输入pip install flask-wtf

输入pip install flask-login

输入pip install flask-sqlalchemy

6.代码讲解

    from datetime import datetime
    from flask import Flask, render_template, flash, redirect, url_for, abort, request
    from flask_sqlalchemy import SQLAlchemy
    from forms import NewsForm


    app = Flask(__name__)
    db = SQLAlchemy(app)


    class News(db.Model):
        """ 新闻模型 """
        __tablename__ = 'news'

        id = db.Column(db.Integer, primary_key=True)
        title = db.Column(db.String(200), nullable=False)
        img_url = db.Column(db.String(200), nullable=False)
        content = db.Column(db.String(2000), nullable=False)
        is_valid = db.Column(db.Boolean, default=True)
        created_at = db.Column(db.DateTime)
        updated_at = db.Column(db.DateTime)
        news_type = db.Column(db.Enum('推荐', '百家', '本地', '图片'))

        comments = db.relationship('Comments', backref='news',
                            lazy='dynamic')

        def __repr__(self):
            return '<News %r>' % self.title


    class Comments(db.Model):
        """ 新闻评论 """

        id = db.Column(db.Integer, primary_key=True)
        content = db.Column(db.String(2000), nullable=False)
        is_valid = db.Column(db.Boolean, default=True)
        created_at = db.Column(db.DateTime)
        updated_at = db.Column(db.DateTime)

        new_id = db.Column(db.Integer, db.ForeignKey('news.id'))

        def __repr__(self):
            return '<News %r>' % self.content


    @app.route('/')
    def index():
        """ 新闻首页 """
        news_list = News.query.filter_by(is_valid=1)
        return render_template("index.html", news_list=news_list)


    @app.route('/cat/<name>/')
    def cat(name):
        """ 新闻类别页面 """
        news_list = News.query.filter_by(is_valid=1, news_type=name)
        return render_template('cat.html', name=name, news_list=news_list)


    @app.route('/detail/<int:pk>/')
    def detail(pk):
        """ 新闻详情页 """
        new_obj = News.query.get(pk)
        return render_template('detail.html', new_obj=new_obj)


    @app.route('/admin/')
    @app.route('/admin/<int:page>/')
    def admin(page=None):
        """ 后台管理首页 """
        if page is None:
            page = 1
        page_data = News.query.filter_by(is_valid=1).paginate(page=page, per_page=4)
        return render_template("admin/index.html", page_data=page_data)


    @app.route('/admin/add/', methods=['GET', 'POST'])
    def add():
        """ 新增新闻 """
        form = NewsForm()
        if form.validate_on_submit():
            n1 = News(
                title=form.title.data,
                content=form.content.data,
                img_url=form.img_url.data,
                news_type=form.news_type.data,
                created_at=datetime.now(),
                updated_at=datetime.now(),
                )
            db.session.add(n1)
            db.session.commit()
            flash("新增成功")
            return redirect(url_for('admin'))
        return render_template("admin/add.html", form=form)


    @app.route('/admin/update/<int:pk>/', methods=['GET', 'POST'])
    def update(pk):
        """ 新增新闻 """
        obj = News.query.get(pk)
        if obj is None:
            abort(404)
        form = NewsForm(obj=obj)
        if form.validate_on_submit():
            obj.title = form.title.data
            obj.content = form.content.data
            obj.news_type = form.news_type.data

            db.session.add(obj)
            db.session.commit()
            flash("修改成功")
            return redirect(url_for('admin'))
        return render_template("admin/update.html", form=form)


    @app.route('/admin/delete/<int:pk>/', methods=['POST'])
    def delete(pk):
        """ 新增新闻 """
        if request.method == 'POST':
            obj = News.query.get(pk)
            if obj is None:
                return 'no'
            obj.is_valid = False
            db.session.add(obj)
            db.session.commit()
            return 'yes'
        return 'no'


    app.config['SQLALCHEMY_DATABASE_URI']  = 'mysql://root:[email protected]/news'

    app.config['SECRET_KEY'] = 'a random string'

    if __name__ == '__main__':

        app.run(debug=True)

猜你喜欢

转载自blog.csdn.net/prospective0821/article/details/80109346
今日推荐