Flask中sqlalchemy模块的实例用法

一、安装

$ pip install flask-sqlalchemy

二、配置

配置选项列表 :

SQLALCHEMY_NATIVE_UNICODE | 可以用于显式禁用原生 unicode 支持。当使用 不合适的指定无编码的数据库默认值时,这对于 一些数据库适配器是必须的(比如 Ubuntu 上某些版本的 PostgreSQL )。|

| SQLALCHEMY_POOL_SIZE | 数据库连接池的大小。默认是引擎默认值(通常 是 5 ) |

| SQLALCHEMY_POOL_TIMEOUT | 设定连接池的连接超时时间。默认是 10 。 |

| SQLALCHEMY_POOL_RECYCLE | 多少秒后自动回收连接。这对 MySQL 是必要的, 它默认移除闲置多于 8 小时的连接。注意如果 使用了 MySQL , Flask-SQLALchemy 自动设定这个值为 2 小时。|

app.config["SQLALCHEMY_DATABASE_URI"] = DATABASE_URI
app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"] = True/False  # 每次请求结束后都会自动提交数据库中的变动.
 
app.config[""] = 
app.config[""] = 
app.config[""] = 
app.config[""] = 
 
DATABASE_URI :
    mysql : mysql://username:password@hostname/database
 
    pgsql : postgresql://username:password@hostname/database
 
    sqlite(linux)  : sqlite:////absolute/path/to/database
 
    sqlite(windows) : sqlite:///c:/absolute/path/to/database

三、初始化示例

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
base_dir = os.path.abspath(os.path.dirname(__file__))
 
app = Flask(__name__)
 
app.config["SQLALCHEMY_DATABASE_URI"] = 'sqlite:///' + os.path.join(base_dir, 'data.sqlite')
app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"] = True
 
db = SQLAlchemy(app)

四、定义模型

模型 表示程序使用的持久化实体. 在 ORM 中, 模型一般是一个 Python 类, 类中的属性对应数据库中的表.

Flaks-SQLAlchemy 创建的数据库实例为模型提供了一个基类以及一些列辅助类和辅助函数, 可用于定义模型的结构.

db.Model    # 创建模型,
db.Column   # 创建模型属性.

模型属性类型 :

常用 SQLAlchemy 列选项

示例 :

class Role(db.Model):
    __tablename__ = "roles"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
 
    def __repr__(self):
        """非必须, 用于在调试或测试时, 返回一个具有可读性的字符串表示模型."""
        return '<Role %r>' % self.name
 
class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True, index=True)
 
    def __repr__(self):          
        """非必须, 用于在调试或测试时, 返回一个具有可读性的字符串表示模型."""
        return '<Role %r>' % self.username

五、关系

关系型数据库使用关系把不同表中的行联系起来。

常用 SQLAlchemy 关系选项:

(1)一对多

原理 : 在 “多” 这一侧加入一个外键, 指定 “一” 这一侧联结的记录.

示例代码 : 一个角色可属于多个用户, 而每个用户只能有一个角色.

class Role(db.Model):
    # ...
    users = db.relationship('User', backref='role')
 
class User(db.Model):
    # ...
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))  # 外键关系.
 
 
###############
db.ForeignKey('roles.id') : 外键关系,
 
Role.users = db.relationship('User', backref='role') : 代表 外键关系的 面向对象视角. 对于一个 Role 类的实例, 
其 users 属性将返回与角色相关联的用户组成的列表. 
    db.relationship() 第一个参数表示这个关系的另一端是哪个模型. 
    backref 参数, 向 User 模型添加了一个 role 数据属性, 从而定义反向关系.  这一属性可替代 role_id 访问 Role 模型, 
    此时获取的是模型对象, 而不是外键的值.

(2)多对多

最复杂的关系类型,需要用到第三章表,即关联表,这样多对多关系可以分解成原表和关联表之间的两个一对多关系。

查询多对多关系分两步 : 遍历两个关系来获取查询结果。

代码示例:

registrations = db.Table("registrations",
                         db.Column("student_id", db.Integer, db.ForeignKey("students.id")),
                         db.Column("class_id", db.Integer, db.ForeignKey("classes.id"))
                         )
 
class Student(db.Model):
    __tablename__ = "students"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
    classes = db.relationship("Class",
                              secondary=registrations,
                              backref=db.backref("students", lazy="dynamic"),
                              lazy="dynamic")
 
class Class(db.Model):
    __tablename__ = "classes"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)

多对多关系仍然使用定义一对多关系的 db.relationship() 方法进行定义, 但在多对多关系中, 必须把 secondary 参数设为关联表。

多对多关系可以在任何一个类中定义, backref 参数会处理好关系的另一侧。

关联表就是一个简单的表, 不是模型, SQLAlchemy 会自动接管这个表。

classes 关系使用列表语义, 这样处理多对多关系比较简单。

Class 模型的 students 关系有 参数 db.backref() 定义. 这个关系还指定了 lazy 参数, 所以, 关系两侧返回的查询都可接受额外的过滤器。

自引用关系

自引用关系可以理解为多对多关系的特殊形式 : 多对多关系的两边由两个实体变为一个实体。

高级多对多关系

使用多对多关系时,往往需要存储所联两个实体之间的额外信息。这种信息只能存储在关联表中,对用户之间的关注来说,可以存储用户关注另一个用户的日期,这样就能按照时间顺序列出所有关注者。

为了能在关系中处理自定义的数据,必须提升关联表的地位,使其变成程序可访问的模型。

关注关联表模型实现:

class Follow(db.Model):
    __tablename__ = "follows"
    follower_id = db.Column(db.Integer, db.ForeignKey("users.id"), primary_key=True)
    followed_id = db.Column(db.Integer, db.ForeignKey("users.id"), primary_key=True)
    timestamp = db.Column(db.DateTime, default=datetime.utcnow)
 
# SQLAlchemy 不能直接使用这个关联表, 因为如果这个做程序就无法访问其中的自定义字段. 相反的, 要把这个多对多关系的左右
两侧拆分成两个基本的一对多关系, 而且要定义成标准的关系。

使用两个一对多关系实现的多对多关系:

class User(UserMixin, db.Model):
    # ...
    followd = db.relationship("Follow",
                              foreign_keys=[Follow.follower_id],
                              backref=db.backref("follower", lazy="joined"),
                              lazy="dynamic",
                              cascade="all, delete-orphan")
    followrs = db.relationship("Follow",
                              foreign_keys=[Follow.followed_id],
                              backref=db.backref("followed", lazy="joined"),
                              lazy="dynamic",
                              cascade="all, delete-orphan")
# 这段代码中, followed 和 follower 关系都定义为 单独的 一对多关系. 
# 注意: 为了消除外键歧义, 定义关系是必须使用可选参数 foreign_keys 指定的外键. 而且 db.backref() 参数并不是指定这两个
关系之间的引用关系, 而是回引 Follow 模型. 回引中的 lazy="joined" , 该模式可以实现立即从连接查询中加载相关对象.
# 这两个关系中, user 一侧设定的 lazy 参数作用不一样. lazy 参数都在 "一" 这一侧设定, 返回的结果是 "多" 这一侧中的记录. 
dynamic 参数, 返回的是查询对象.
# cascade 参数配置在父对象上执行的操作相关对象的影响. 比如, 层叠对象可设定为: 将用户添加到数据库会话后, 要自定把所有
关系的对象都添加到会话中. 删除对象时, 默认的层叠行为是把对象联结的所有相关对象的外键设为空值. 但在关联表中, 删除记录
后正确的行为是把执行该记录的实体也删除, 因为这样才能有效销毁联结. 这就是 层叠选项值 delete-orphan 的作用. 设为 all, 
delete-orphan 的意思是启动所有默认层叠选项, 并且还要删除孤儿记录。

(3)一对一

可以看做特殊的 一对多 关系. 但调用 db.relationship() 时 要把 uselist 设置 False, 把 多变为 一。

(4)多对一

将一对多关系,反过来即可,也是一对多关系。

六、数据库操作

(1)创建数据库及数据表

创建数据库

db.create_all()

示例 :

$ python myflask.py shell
> from myflask import db
> db.create_all()

如果使用 sqlite , 会在 SQLALCHEMY_DATABASE_URI 指定的目录下 多一个文件,文件名为该配置中的文件名。

如果数据库表已经存在于数据库中, 那么 db.create_all() 不会创建或更新这个表。

更新数据库

方法一 :

先删除, 在创建 –> 原有数据库中的数据, 都会消失.

> db.drop_all()
> db.create_all()

方法二 :

数据库迁移框架 : 可以跟自动数据库模式的变化,然后增量式的把变化应用到数据库中。

SQLAlchemy 的主力开发人员编写了一个 迁移框架 Alembic, 除了直接使用 Alembic wait, Flask 程序还可使用 Flask-Migrate 扩展, 该扩展对 Alembic 做了轻量级包装, 并集成到 Flask-Script 中, 所有操作都通过 Flaks-Script 命令完成。

① 安装 Flask-Migrate

$ pip install flask-migrate

② 配置

from flask_migrate import Migrate, MigrateCommand
 
# ...
migrate = Migrate(app, db)
manager.add_command('db', MigrateCommand)

③ 数据库迁移

a. 使用 init 自命令创建迁移仓库.

$ python myflask.py db init # 该命令会创建 migrations 文件夹, 所有迁移脚本都存在其中.

b. 创建数据路迁移脚本.
    $ python myflask.py db revision     # 手动创建 Alemic 迁移
    创建的迁移只是一个骨架, upgrade() 和 downgrade() 函数都是空的. 开发者需要使用 Alembic 提供的 Operations 对象
    指令实现具体操作.
 
    $ python myflask.py db migrate -m COMMONT    # 自动创建迁移.
    自动创建的迁移会根据模型定义和数据库当前的状态之间的差异生成 upgrade() 和 downgrade() 函数的内容.
 
    ** 自动创建的迁移不一定总是正确的, 有可能漏掉一些细节, 自动生成迁移脚本后一定要进行检查.
 
 
c. 更新数据库
    $ python myflask.py db upgrade     # 将迁移应用到数据库中.

(2)插入行

模型的构造函数,接收的参数是使用关键字参数指定的模型属性初始值。注意,role 属性也可使用,虽然他不是真正的数据库列,但却是一对多关系的高级表示。这些新建对象的 id 属性并没有明确设定,因为主键是由 Flask-SQLAlchemy 管理的。现在这些对象只存在于 Python 解释器中,尚未写入数据库。

>> from myflask import db, User, Role
>> db.create_all()
>> admin_role = Role(name="Admin")
>> mod_role = Role(name="Moderator")
>> user_role = Role(name="User")
>> user_john = User(username="john", role=admin_role)
>> user_susan = User(username="susan", role=mod_role)
>> user_david = User(username="david", role=user_role)
>> admin_role.name
'Admin'
>> admin_role.id
None
---------
>> db.session.add_all([admin_role, mod_role, user_role, user_john, user_susan, user_david])  # 把对象添加到会话中.
>> db.session.commit()      # 把对象写入数据库, 使用 commit() 提交会话.

(3)修改行

>> admin_role = "Administrator"
>> db.session.add(admin_role)
>> db.session.commit()

(4)删除行

>> db.session.delete(mod_role)
>> db.session.commit()

(5)查询行

Flask-SQLAlchemy 为每个模型类都提供了 query 对象.

获取表中的所有记录

>> Role.query.all()
  [<Role u'Admin'>, <Role u'Moderator'>, <Role u'User'>]
>> User.query.all()
  [<Role u'john'>, <Role u'susan'>, <Role u'david'>]

查询过滤器

filter_by() 等过滤器在 query 对象上调用, 返回一个更精确的 query 对象. 多个过滤器可以一起调用, 直到获取到所需的结果.

>> User.query.filter_by(role=user_role).all()   # 以列表形式,返回所有结果,
>> User.query.filter_by(role=user_role).first() # 返回结果中的第一个.

filter() 对查询结果过滤,比”filter_by()”方法更强大,参数是布尔表达式

# WHERE age<20
users = User.query.filter(User.age<20)
# WHERE name LIKE 'J%' AND age<20
users = User.query.filter(User.name.startswith('J'), User.age<20)

查询过滤器 :

查询执行函数 :

first_or_404() | 返回查询的第一个结果,如果没有结果,则终止请求,返回 404 错误响应 | |

| get() | 返回指定主键对应的行,如果没有对应的行,则返回 None |

get_or_404() | 返回指定主键对应的行,如果没找到指定的主键,则终止请求,返回 404 | |错误响应

| count() | 返回查询结果的数量 |

| paginate() | 返回一个 Paginate 对象,它包含指定范围内的结果 |

(6)会话管理,事务管理

单个提交

>> db.session.add(ONE)
>> db.session.commit()

多个提交

>> db.session.add_all([LIST_OF_MEMBER])
>> db.session.commit()

删除会话

>> db.session.delete(mod_role)
>> db.session.commit()

事务回滚 : 添加到数据库会话中的所有对象都会还原到他们在数据库时的状态.

>> db.session.rollback()

七、视图函数中操作数据库

@app.route('/', methods=['GET', 'POST'])
def index():
    form = NameForm()
    if form.validate_on_submit():
        user = User.query.filter_by(username=form.name.data).first()
        if user is None:
            user = User(username=form.name.data)
            db.session.add(user)
            session["known"] = False
        else:
            session["known"] = True
        session["name"] = form.name.data
        form.name.data = ""             # why empty it ?
        return redirect(url_for("index"))
    return render_template("index.html", current_time=datetime.utcnow(), form=form, name=session.get("name"), 
    known=session.get("known"))

八、分页对象 Pagination

1. paginate() 方法

paginate() 方法的返回值是一个 Pagination 类对象,该类在 Flask-SQLAlchemy 中定义,用于在模板中生成分页链接。

paginate(页数[,per_page=20, error_out=True])
    页数 : 唯一必须指定的参数,
    per_page : 指定每页现实的记录数量, 默认 20.
    error_out : True 如果请求的页数超出了返回, 返回 404 错误; False 页数超出范围时返回一个,空列表.

示例代码:

@main.route("/", methods=["GET", "POST"])
def index():
    # ...
    page = request.args.get('page', 1, type=int)    # 渲染的页数, 默认第一页, type=int 保证参数无法转换成整数时, 
    返回默认值.
    pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page, per_page=current_app.config
    ["FLASKY_POSTS_PER_PAGE"], error_out=False)
    posts = pagination.items
    return render_template('index.html', form=form, posts=posts,pagination=pagination)

2. 分页对象的属性及方法:

Flask_SQLAlchemy 分页对象的属性:

在分页对象可调用的方法:

3. 在模板中与 BootStrap 结合使用示例

使用 Flaks-SQLAlchemy 的分页对象与 Bootstrap 中的分页 CSS, 可以轻松的构造出一个 分页导航.

分页模板宏 _macros.html : 创建一个 Bootstrap 分页元素, 即一个有特殊样式的无序列表.

{% macro pagination_widget(pagination,endpoint) %}
<ul class="pagination">
    <li {% if not pagination.has_prev %} class="disabled" {% endif %}>
        <a href="{% if pagination.has_prev %}{{url_for(endpoint, page=paginatin.page - 1, **kwargs)}}{% else %}
        #{% endif %}">
            &laquo;
        </a>
    </li>
    {% for p in pagination,.iter_pages() %}
        {% if p %}
            {% if p == pagination.page %}
            <li class="active">
                <a href="{{ url_for(endpoint, page=p, **kwargs) }}" rel="external nofollow" >{{p}}</a>
            </li>
            {% else %}
            <li>
                <a href="{{ url_for(endpoint, page = p, **kwargs) }}" rel="external nofollow" >{{p}}</a>
            </li>
            {% endif %}
        {% else %}
        <li class="disabled"><a href="#" rel="external nofollow" >&hellip;</a> </li>
        {% endif %}
    {% endfor %}
    <li {% if not pagination.has_next %} class="disabled" {% endif%}>
        <a href="{% if paginatin.has_next %}{{ url_for(endpoint, page=pagination.page+1, **kwargs) }}{% else %}
        #{% endif %}">
            &raquo;
        </a>
    </li>
</ul>
{% endmacro %}

导入使用分页导航

{% extends "base.html" %}
{% import "_macros.html" as macros %}
...
<div class="pagination">
    {{ macro.pagination_widget(pagination, ".index")}}
</div>

九、监听事件

1. set 事件

示例代码 :

from markdown import markdown
import bleach
class Post(db.Model):
    # ...
    body = db.Colume(db.Text)
    body_html = db.Column(db.Text)
    # ...
    @staticmethod
    def on_changeed_body(target, value, oldvalue, initiator):
        allowed_tags = ["a", "abbr", "acronym", "b", "blockquote", "code", "em",
                        "i", "li", "ol", "pre", "strong", "ul", "h1", "h2","h3","h4","p"]
        target.body_html = bleach.linkify(bleach.clean(markdown(value, output_format="html"), tags=allowed_tags, 
        strip=True))
db.event.listen(Post.body, "set", Post.on_changeed_body) 
# on_changed_body 函数注册在 body 字段上, 是 SQLIAlchemy "set" 事件的监听程序, 
# 这意味着只要这个类实例的 body 字段设了新值, 函数就会自动被调用. 
# on_changed_body 函数把 body 字段中的文本渲染成 HTML 格式, 
# 结果保存在 body_html 中, 自动高效的完成 Markdown 文本到 HTML 的转换

十、记录慢查询

十一、Binds 操作多个数据库

十二、其他

1. ORM 在查询时做初始化操作

当 SQLIAlchemy ORM 从数据库查询数据时, 默认不调用__init__ 方法, 其底层实现了 Python 类的 __new__() 方法, 直接实现 对象实例化, 而不是通过 __init__ 来实例化对象.

如果需要在查询时, 依旧希望实现一些初始化操作, 可以使用 orm.reconstructor() 装饰器或 实现 InstanceEvents.load() 监听事件。

# orm.reconstructor
from sqlalchemy import orm
class MyMappedClass(object):
    def __init__(self, data):
        self.data = data
        # we need stuff on all instances, but not in the database.
        self.stuff = []
    @orm.reconstructor
    def init_on_load(self):
        self.stuff = []
# InstanceEvents.load()
from sqlalchemy import event
## standard decorator style
@event.listens_for(SomeClass, 'load')
def receive_load(target, context):
    "listen for the 'load' event"
    # ... (event handling logic) ...

如果只是希望在从数据库查询生成的对象中包含某些属性, 也可以使用 property 实现:

class AwsRegions(db.Model):
    name=db.Column(db.String(64))
    ...
    @property
    def zabbix_api(self):
        return ZabbixObj(zabbix_url)
    @zabbix_api.setter
    def zabbix_api(self):
        raise ValueError("zabbix can not be setted!")

到此这篇关于Flask中sqlalchemy模块的实例用法的文章就介绍到这了,更多相关Flask中sqlalchemy模块的使用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 在Python程序和Flask框架中使用SQLAlchemy的教程

    ORM 江湖 曾几何时,程序员因为惧怕SQL而在开发的时候小心翼翼的写着sql,心中总是少不了恐慌,万一不小心sql语句出错,搞坏了数据库怎么办?又或者为了获取一些数据,什么内外左右连接,函数存储过程等等.毫无疑问,不搞懂这些,怎么都觉得变扭,说不定某天就跳进了坑里,叫天天不应,喊地地不答. ORM 的出现,让畏惧SQL的开发者,在坑里看见了爬出去的绳索,仿佛天空并不是那么黑暗,至少再暗,我们也有了眼睛.顾名思义,ORM 对象关系映射,简而言之,就是把数据库的一个个table(表),映射为编程语

  • flask的orm框架SQLAlchemy查询实现解析

    这篇文章主要介绍了flask的orm框架SQLAlchemy查询实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一对多,多对多是什么? 一对多.例如,班级与学生,一个班级对应多个学生,或者多个学生对应一个班级. 多对多.例如,学生与课程,可以有多个学生修同一门课,同时,一门课也有很多学生. 一对多查询 如果一个项目,有两张表.分别是班级表,学生表. 在设计数据表时,我们给学生表设置一个外键,指向班级表的 id . sqlalchemy

  • Python使用Flask-SQLAlchemy连接数据库操作示例

    本文实例讲述了Python使用Flask-SQLAlchemy连接数据库操作.分享给大家供大家参考,具体如下: 需要安装flask pip install flask 安装Mysql-Python (这个是py的mysql驱动,这个在官方没有win的支持,只有第三方才有py2.7的whl) pip install MySQL_python-1.2.5-cp27-none-win_amd64.whl 注:上述whl文件也可点击此处链接下载到本地安装:https://www.lfd.uci.edu/

  • Python的Flask框架中SQLAlchemy使用时的乱码问题解决

    一.问题 这两天在学习使用flask + SQLAlchemy 定制一个web查询页面的demo ,在测试时,发现查询到的结果显示乱码 .这里将解决方法记录下. 二.解决思路 1.flask 程序上定位 flask的文档中提到可以通过设置SQLALCHEMY_NATIVE_UNICODE来禁止使用SQLAlchemy默认的Unicode编码.有可能是SQLAlchemy默认的Unicode编码不是UTF-8,抱着这样的想法,在程序中指定了"SQLALCHEMY_NATIVE_UNICODE=Fa

  • Python利用flask sqlalchemy实现分页效果

    Flask-sqlalchemy是关于flask一个针对数据库管理的.文中我们采用一个关于员工显示例子. 首先,我们创建SQLALCHEMY对像db. from flask import Flask, render_template,request from flask_sqlalchemy import SQLAlchemy app = Flask(__name__,static_url_path='') app.debug = True app.secret_key = "faefasdfa

  • Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程

    使用Flask-SQLAlchemy管理数据库 Flask-SQLAlchemy是一个Flask扩展,它简化了在Flask应用程序中对SQLAlchemy的使用.SQLAlchemy是一个强大的关系数据库框架,支持一些数据库后端.提供高级的ORM和底层访问数据库的本地SQL功能. 和其他扩展一样,通过pip安装Flask-SQLAlchemy: (venv) $ pip install flask-sqlalchemy 在Flask-SQLAlchemy,数据库被指定为URL.表格列出三个最受欢

  • Flask中sqlalchemy模块的实例用法

    一.安装 $ pip install flask-sqlalchemy 二.配置 配置选项列表 : SQLALCHEMY_NATIVE_UNICODE | 可以用于显式禁用原生 unicode 支持.当使用 不合适的指定无编码的数据库默认值时,这对于 一些数据库适配器是必须的(比如 Ubuntu 上某些版本的 PostgreSQL ).| | SQLALCHEMY_POOL_SIZE | 数据库连接池的大小.默认是引擎默认值(通常 是 5 ) | | SQLALCHEMY_POOL_TIMEOU

  • Python中os模块的实例用法

    1.说明 os.path.exists():用于判断某个路径(文件或文件夹)是否存在,若存在则返回True,若不存在则返回False. os.makedirs():用于创建文件夹.传入所欲创建的文件夹的路径即可,没有返回值.值得一提的是,这个函数可以实现目录的递归创建,也就是说如果所传入的路径中,倒数第二级的目录也不存在,那么就会先创建该级目录,然后在在目录下创建所欲创建的目录,依此类推. os.path.basename():传入一个文件的路径,返回该文件的文件名. os.path.dirna

  • Python中threading模块join函数用法实例分析

    本文实例讲述了Python中threading模块join函数用法.分享给大家供大家参考.具体分析如下: join的作用是众所周知的,阻塞进程直到线程执行完毕.通用的做法是我们启动一批线程,最后join这些线程结束,例如: for i in range(10): t = ThreadTest(i) thread_arr.append(t) for i in range(10): thread_arr[i].start() for i in range(10): thread_arr[i].joi

  • Python中sys模块功能与用法实例详解

    本文实例讲述了Python中sys模块功能与用法.分享给大家供大家参考,具体如下: sys-系统特定的参数和功能 该模块提供对解释器使用或维护的一些变量的访问,以及与解释器强烈交互的函数.它始终可用. sys.argv 传递给Python脚本的命令行参数列表.argv[0]是脚本名称(依赖于操作系统,无论这是否是完整路径名).如果使用-c解释器的命令行选项执行命令,argv[0]则将其设置为字符串'-c'.如果没有脚本名称传递给Python解释器,argv[0]则为空字符串. 要循环标准输入或命

  • Python中os模块功能与用法详解

    本文实例讲述了Python中os模块功能与用法.分享给大家供大家参考,具体如下: OS模块 Python的os模块封装了常见的文件和目录操作,本文只是列出部分常用的方法,更多的方法可以查看官方文档. 下面是部分常见的用法: 方法 说明 os.mkdir 创建目录 os.rmdir 删除目录 os.rename 重命名 os.remove 删除文件 os.getcwd 获取当前工作路径 os.walk 遍历目录 os.path.join 连接目录与文件名 os.path.split 分割文件名与目

  • python3中sys.argv的实例用法

    sys.argv就是一个从程序外部获取参数的,这个外部指的是我们执行python文件时后面追加的参数,例如:python3 test.py test1 test2 从外部获取的参数可以是单个也可以是多个,获取的是一个列表(list),也就是说sys.argv其实可以看做是一个列表,能用[]提取到其中的元素,第一个元素是程序本身,其次才是外部追加的参数 import sysprint(sys.argv[0]) 执行这个python文件 D:\Python36\python.exe F:/老男孩Py

  • python中pathlib模块的基本用法与总结

    前言 相比常用的 os.path而言,pathlib 对于目录路径的操作更简介也更贴近 Pythonic.但是它不单纯是为了简化操作,还有更大的用途. pathlib 是Python内置库,Python 文档给它的定义是:The pathlib module – object-oriented filesystem paths(面向对象的文件系统路径).pathlib 提供表示文件系统路径的类,其语义适用于不同的操作系统. 更多详细的内容可以参考官方文档:https://docs.python.

  • python中altair可视化库实例用法

    作为六大python可视化库,基本上学会都是可以通吃任何领域的存在,本章要给大家介绍的Altair就是其中之一的可视化库,能够将数据转化为非常直观的图片,让我们更加清晰的认知数据之前直观的联系,俨然已经成为可视化库中的新星,好啦,下面就让我们详细了解下这个荣获众多粉丝的可视化库的使用技巧吧. 安装Altair: 依赖JupyterLab $ pip install -U altair vega_datasets jupyterlab 导入Altair: import altair as alt

  • python使用numpy中的size()函数实例用法详解

    在python中,提到如何计算多维数组和矩阵,那一定会想到numpy.numpy定义了矩阵和数组,为它们提供了相关的运算.size中文解释为大家.尺寸的意思,如果想要统计矩阵元素个数,使用size()函数就可以解决. 1.Numpy size()函数 主要是用来统计矩阵元素个数,或矩阵某一维上的元素个数的函数. 2.使用语法 numpy.size(a, axis=None) 3.使用参数 a:输入的矩阵 axis:int型的可选参数,指定返回哪一维的元素个数.当没有指定时,返回整个矩阵的元素个数

  • python中time tzset()函数实例用法

    在时间的设置方面,为了能够跟系统时间有更好的区分,我们有时会借用一些函数方法来实现.就拿tzset()来说是设置时间的一种方法,其内在的变量依靠TZ的控制,如果没有设置TZ则以系统时间为准.接下来我们简单就time tzset().TZ进行说明,并对函数的语法.参数.返回值.实例带来使用介绍. 1.说明 tzset()主要用于设置时间变量,它通过获取TZ环境变量初始化tzname变量,在类System-V系统中,它同时设置timezone(相对UTC以西的秒数,向西为正,向东为负)和daylig

随机推荐