精华内容
下载资源
问答
  • SQLAlchemy在使用Python操作数据库时,可以使用SQLAlchemy库:SQLAlchemy 是python 操作数据库的一个库。能够进行 orm 映射官方文档 sqlchemySQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,...

    SQLAlchemy

    在使用Python操作数据库时,可以使用SQLAlchemy库:

    SQLAlchemy 是python 操作数据库的一个库。能够进行 orm 映射官方文档 sqlchemy

    SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”。SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合;而对象集合的抽象又重要于表和行

    安装和初始化

    pip安装命令

    pip install sqlalchemy

    检查是否安装成功

    >>>import sqlalchemy

    >>>sqlalchemy.__version__

    '1.2.10'

    >>>

    显示版本号1.2.10,这样就说明安装成功了

    使用sqlalchemy对数据库操作

    定义元信息,绑定到引擎

    >>> from sqlalchemy import *

    >>> from sqlalchemy.orm import *

    >>> engine = create_engine('sqlalchemy.db', echo=True) #定义引擎

    >>> metadata = MetaData(engine) # 绑定元信息

    >>>

    创建表

    >>> users_table = Table('users', metadata,

    ... Column('id', Integer, primary_key=True),

    ... Column('name', String(40)),

    ... Column('email', String(120)))

    >>>

    >>> users_table.create()

    >>> users_table = Table('users', metadata, autoload=True)

    插入数据

    >>>i = users_table.insert()

    >>>i.execute(name='linyk3', email='linyk2655@126.com')

    建立ORM映射

    class User(db.Model):

    __tablename__ = "user_table"

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)

    name = db.Column(db.String(40))

    email = db.Column(db.String(120))

    def __repr__(self):

    return '%s(%r, %r)' % (self.__class__.__name__, self.name, self.email)

    建立会话

    >>> session = create_session()

    >>> query = session.query(User)

    >>> u = query.filter_by(name='linyk3').first()

    如果有多个查询条件,并且查询条件不确定

    可以使用下面查询:

    def get_user(id=None, name=None, email=None, page=None):

    q = self.session.query(User)

    if id:

    q = q.filter(User.id == id)

    if name:

    q = q.filter(User.name == name)

    if email:

    q = q.filter(User.email == email)

    if page:

    q = q.limit(page * pageSize)

    return q.all()

    还可以使用filter_by,但是不支持比较运算符

    filters = {'name': 'linyk3', 'email': 'linyk2655@126.com'}

    User.query.filter_by(**filters).first()

    filter比filter_by的功能更强大,支持比较运算符,支持or_、in_等语法,如果表中有其他字段需要判断,例如年龄,日期等

    filters = {

    User.name == 'linyk3',

    User.age > 25

    }

    User.query.filter(*filters).first()

    经过试验,参数中 dict {} 和 list [] 都是可以的。

    filters = [

    User.name == 'linyk3',

    User.age > 25 ]

    User.query.filter(*filters).first()

    如果查询条件有多个,且不确定前端是否传过来,或者传过来的值是否为空,可以采用查询条件拼接来实现,这时list.append()方法就很有用处了,项目例子:

    @admin.route("/query", methods=["GET"])

    @admin.route("/query/", methods=["GET"])

    def clock_query(page=None):

    if page is None:

    page = 1

    # app.logger.info(json.dumps(request.args))

    # 拼接查询条件

    param = []

    if ('userId' in request.args) and (request.args['userId']):

    userId = request.args['userId']

    param.append(LogInfo.userId == userId)

    if ('userName' in request.args) and (request.args['userName']):

    userName = request.args['userName']

    param.append(LogInfo.userName == userName)

    if ('startDate' in request.args) and (request.args['startDate']):

    startDate = request.args['startDate']

    param.append(db.cast(LogInfo.startTime, db.DATE) >= db.cast(startDate, db.Date))

    if ('endDate' in request.args) and (request.args['endDate']):

    endDate = request.args['endDate']

    param.append(db.cast(LogInfo.startTime, db.DATE) <= db.cast(endDate, db.Date))

    for item in param:

    app.logger.info(item)

    page_data = LogInfo.query.filter(*param).paginate(page=page, per_page=20)

    return render_template("loginfo.html", page_data=page_data)

    这样后台能接收的请求就很灵活了:

    # 四个查询条件都有

    http://localhost:8080/admin/query?userId=linyk001&userName=linyk3&startDate=20180723&endDate=20180723

    # 只有两个查询条件

    http://localhost:8080/admin/query?userId=linyk001&userName=linyk3

    # 有四个查询条件,但其中两个为None,所以不应该作为查询条件

    http://localhost:8080/admin/query?userId=&userName=&startDate=20180723&endDate=20180723

    这样就非常灵活了,初学python,捣鼓了挺久的才实现,发现python还是很方便的,继续努力!

    展开全文
  • 数据库存储通讯录,要求按姓名/电话号码查询查询条件只有一个输入入口,自动识别输入的是姓名还是号码,允许模糊查询。这篇文章主要介绍了Python编写通讯录,支持模糊查询,利用数据库存储,...

    摘要:这篇Python开发技术栏目下的“Python编写通讯录通过数据库存储实现模糊查询功能”,介绍的技术点是“Python、写通讯录、查询功能、模糊查询、通讯录、数据库”,希望对大家开发技术学习和问题解决有帮助。数据库存储通讯录,要求按姓名/电话号码查询,查询条件只有一个输入入口,自动识别输入的是姓名还是号码,允许模糊查询。这篇文章主要介绍了Python编写通讯录,支持模糊查询,利用数据库存储,需要的朋友可以参考下

    1.要求

    数据库存储通讯录,要求按姓名/电话号码查询,查询条件只有一个输入入口,自动识别输入的是姓名还是号码,允许模糊查询。

    2.实现功能

    可通过输入指令进行操作。

    (1)首先输入“add”,可以对通讯录进行添加联系人信息。

    sql1 =

    'insert into TA(ID,NAME,AGE,ADDRESS,TELENUMBER)'

    sql1 += 'values("%d","%s","%d","%s","%s");' % (ID,name, age, address, telenumber)

    conn.execute(sql1)

    conn.commit() # 提交,否则无法保存

    (2)输入“delete”,可以删除指定的联系人信息。

    输入姓名删除:

    cursor = c.execute( "SELECT name from TA where name = '%s';" %i)

    输入电话号码删除:

    cursor = c.execute( "SELECT name from TA where telenumber= '%s';" % i)

    (3)输入“search”,可以输入联系人或者电话号码,查询联系人信息,这里实现了模糊查询以及精确查询。

    输入姓名查询:

    sql1 = "SELECT id,name,age, address, telenumber from TA where telenumber like '%" + i +

    "%'"

    cursor = c.execute(sql1)

    输入电话号码查询:

    sql1= "SELECT id,name,age, address, telenumber from TA where name like '%" +i+

    "%'"

    cursor = c.execute(sql1)

    (4)输入“searchall”,查询全部联系人信息。

    cursor = c.execute( "SELECT id, name, age, address, telenumber from TA" )

    3.数据库sqlite3

    Python自带一个轻量级的关系型数据库sqlite。这一数据库使用SQL语言。sqlite作为后端数据库,可以搭配Python建网站,或者制作有数据存储需求的工具。sqlLite还在其它领域有广泛的应用,比如HTML5和移动端。Python标准库中的sqlite3提供该数据库的接口。因此此次使用了sqlite3数据库存储通讯录的联系人信息。

    源码:

    import sqlite3

    import re

    #打开本地数据库用于存储用户信息

    conn = sqlite3.connect('mysql_telephone_book.db')

    c = conn.cursor()

    #在该数据库下创建表,创建表的这段代码在第一次执行后需要注释掉,否则再次执行程序会一直提示:该表已存在

    '''c.execute("CREATE TABLE TA

    (ID INT PRIMARY KEY NOT NULL,

    NAME TEXT NOT NULL,

    AGE INT NOT NULL,

    ADDRESS CHAR(50),

    TELENUMBER TEXT);")'''

    conn.commit()#提交当前的事务

    #增加用户信息

    def insert():

    global conn

    c = conn.cursor()

    ID=int(input("请输入id号:"))

    name=input("请输入姓名:")

    age=int(input("请输入年龄:"))

    address=input("请输入地址:")

    telenumber=input("请输入电话号码:")

    sql1 = 'insert into TA(ID,NAME,AGE,ADDRESS,TELENUMBER)'

    sql1 += 'values("%d","%s","%d","%s","%s");' % (ID,name, age, address, telenumber)

    conn.execute(sql1)

    conn.commit()#提交,否则无法保存

    print("提交成功!!")

    #删除用户信息

    def delete():

    global conn

    c=conn.cursor()

    i = input("请输入所要删除的联系人姓名或电话号码:")

    if len(i) < 11:

    cursor = c.execute("SELECT name from TA where name = '%s';"%i)

    for row in cursor:

    if i == row[0]:

    c.execute("DELETE from TA where name ='%s';"%i)

    conn.commit()

    print("成功删除联系人信息!!")

    break

    else:

    print("该联系人不存在!!")

    else :

    cursor = c.execute("SELECT name from TA where telenumber= '%s';" % i)

    for row in cursor:

    if i == row[0]:

    c.execute("DELETE from TA where telenumber ='%s';" % i)

    conn.commit()

    print("成功删除联系人信息!!")

    break

    else:

    print("该电话号码错误!!")

    #查询用户信息

    def search():

    global conn

    c = conn.cursor()

    i = input("请输入所要查询的联系人姓名或电话号码:")

    if i.isnumeric():

    sql1 = "SELECT id,name,age, address, telenumber from TA where telenumber like '%" + i + "%'"

    cursor = c.execute(sql1)

    res=cursor.fetchall()

    if len(res)!=0:

    for row in res:

    print("id:{0}".format(row[0]))

    print("姓名:{0}".format(row[1]))

    print("年龄:{0}".format(row[2]))

    print("地址:{0}".format(row[3]))

    print("电话号码:{0}".format(row[4]))

    else:

    print("无此电话号码!!")

    else:

    sql1="SELECT id,name,age, address, telenumber from TA where name like '%"+i+"%'"

    cursor = c.execute(sql1)

    res=cursor.fetchall()

    if len(res) == 0:

    print("该联系人不存在!!")

    else:

    for row in res:

    print("id:{0}".format(row[0]))

    print("姓名:{0}".format(row[1]))

    print("年龄:{0}".format(row[2]))

    print("地址:{0}".format(row[3]))

    print("电话号码:{0}".format(row[4]))

    #显示所有用户信息

    def showall():

    global conn

    c = conn.cursor()

    cursor = c.execute("SELECT id, name, age, address, telenumber from TA")

    for row in cursor:

    print("id:{0}".format(row[0]))

    print("姓名:{0}".format(row[1]))

    print("年龄:{0}".format(row[2]))

    print("地址:{0}".format(row[3]))

    print("电话号码:{0}".format(row[4]))

    print("指令如下:\n1.输入\"add\"为通讯录添加联系人信息\n2.输入\"delete\"删除通讯录里的指定联系人信息 \n3.输入\"searchall\"查询通讯录里的所有用户 \n4.输入\"search\"根据姓名或手机号码查找信息 ")

    while 1:

    temp = input("请输入指令:")

    if temp == "add":

    insert()

    print("添加成功!")

    temp1=input("是否继续操作通讯录?(y or n)")

    if temp1=="n":

    print("成功退出!!")

    break

    else:

    continue

    elif temp=="delete":

    delete()

    temp1 = input("是否继续操作通讯录?(y or n)")

    if temp1 == "n":

    print("成功退出!!")

    break

    else:

    continue

    elif temp=="searchall":

    showall()

    temp1 = input("是否想继续操作通讯录?(y or n)")

    if temp1 == "n":

    print("成功退出!!")

    break

    else:

    continue

    elif temp=="search":

    search()

    temp1 = input("您是否想继续操作通讯录?(y or n)")

    if temp1 == "n":

    print("成功退出!!")

    break

    else:

    continue

    else:

    print("请输入正确指令!!")

    conn.close()#关闭数据库

    总结

    以上所述是小编给大家介绍的Python编写通讯录通过数据库存储实现模糊查询功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对Java大数据社区网站的支持!

    如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

    展开全文
  • 数据库条件查询1. 分页查询1. limit 查询select * from students limit 5;2. limit分页查询(页面+ 显示个数)select * from students limit 0, 2;(从小到大排列)select * from students order by age desc, limit 0, ...

    数据库条件查询

    1. 分页查询

    1. limit 查询

    select * from students limit 5;

    2. limit分页查询(页面+ 显示个数)

    select * from students limit 0, 2;

    (从小到大排列)select * from students order by age desc, limit 0, 2;

    2. 聚合函数

    1. count()计算总数

    select count(*) from students;

    2. 聚合函数, 默认跳过null值

    select count(ifnull(height, 0)) from students where gender = 1;

    3. max, min,sum, avg 最大值, 最小值, 求和, 平均值

    select max(age) from students;

    4. round() 四舍五入

    select round(avg(age) ,2) from students;

    3. 分组查询

    1. group by(按类分组)

    select gender from students group by gender;

    2. group by + group_concat() (按类分组, 并查询其他属性)

    select gender, group_concat(name) from students group by gender;

    3. group by + 聚合函数

    select gender, count(age) from students group by gender;

    4. group by + having (having相当于where, 用于group by中)

    select gender, group_concat(name) from students group by gender having gender in (1, 2);

    5. group by + with rollup (在最后的记录后面新增一行, 计算总数和统计结果)

    select gender, count(*) from students group by gender with rollup;

    4. 连接查询

    1. 内连接

    select * from students inner join classes;

    select s.name, c.name fromstudents as s inner join classes as c on s.cls_id = c.id;

    (不使用inner join表示内连接) select s.name, c.name from students s, classes c where s.cls_id = c.id;

    2. 左连接

    select * from students s left join classes c where s.cls_id = c.id;

    3. 右连接

    select * from students s right join classes c where s.cls_id = c.id;

    4. 自连接

    select a.id, a.title from areas a inner join areas c on a.id = c.id where c.title = '陕西省';

    select r.id, r.title from areas r inner join area.a on r.id = a.id where a.title = '西安市';

    5. 子查询

    (查出高于平均身高的信息) select * from students where height > (select avg(height) from students);

    5. 外键(为字段添加约束)

    alter table students add foreign key(cls_id) references classes(id);

    展开全文
  • #encoding=utf-8import MySQLdbclass Sjb_data():def __init__(self):self.url = urldef mysql(self,sql):db = MySQLdb.connect(host=‘IP地址‘,port = 3306,user=r‘用户名‘,passwd=‘密码‘,db =‘数据库名‘,...

    #encoding=utf-8

    import MySQLdb

    class Sjb_data():

    def __init__(self):

    self.url = url

    def mysql(self,sql):

    db = MySQLdb.connect(host=‘IP地址‘,port = 3306,user=r‘用户名‘,passwd=‘密码‘,db =‘数据库名‘,charset= ‘utf8‘)

    cur = db.cursor()

    cur.execute(sql) #执行sql

    #data = cur.fetchone() # 使用 fetchone() 方法获取一条数据

    results = cur.fetchall() #获取查询表内所有数据

    for i in results:

    print i #分别打印表内每一条数据

    db.close() #关闭数据库

    if __name__ == "__main__":

    t = Sjb_data()

    mysql = "SELECT * FROM qyswfx_nsrjbxx t where t.nsrsbh=‘%s‘" %(‘%s的值‘)

    t.mysql(mysql)

    #刚开始sql是mysql = "SELECT * FROM qyswfx_nsrjbxx t where t.nsrsbh=%s" %(‘%s的值‘),

    #查询一直报错:_mysql_exceptions.OperationalError: (1054,"Unknown column ‘查询条件的值‘ in ‘where clause‘",

    #在网上查了之后发现是因为where条件后面的值格式化输出的时候还是要加引号才能识别,加了之后就能正常查询到了。

    原文:https://www.cnblogs.com/xinyibaba/p/9233228.html

    展开全文
  • 数据库条件查询1. 分页查询1. limit 查询select * from students limit 5;2. limit分页查询(页面+ 显示个数)select * from students limit 0, 2;(从小到大排列)select * from students order by age desc, limit 0, ...
  • Python Django2 model 查询介绍(条件、范围、模糊查询)发布时间:2020-09-19 17:24:51来源:脚本之家阅读:118条件查询范围查询模糊查询条件查询all()返回全部结果集filter(**kwargs)返回满足参数定义的结果集 例如...
  • 总体内容一、数据准备、基本的查询二、条件查询三、排序四、聚合、分组五、分页六、连接查询(多表的时候有用,单表的时候几乎没有用)七、自关联八、子查询九、总结一、数据准备、基本的查询1.1、创建数据库 ...
  • 1.要求数据库存储通讯录,要求按姓名/电话号码查询查询条件只有一个输入入口,自动识别输入的是姓名还是号码,允许模糊查询。2.实现功能Python资源共享群:484031800可通过输入指令进行操作。(1)首先输入“add”,...
  • python高级------MySQl数据库条件查询(5)python修炼第二十四天2019年 4月 23日 晴11.子查询– 标量子查询: 子查询返回的结果是一个数据(一行一列)– 列子查询: 返回的结果是一列(一列多行)– 行子查询: 返回的...
  • 开发要求: ... 通过条件查询MySQL获取数据 2. 将获取的数据写入到Excel中,对应字段名 3. 将Excel作为附件内容,将邮件发送至相关人员 程序: 1. README # 作者:hkey # 博客地址:hukey....
  • Python数据库查询之组合条件查询-F&amp;Q查询F查询(取字段的值)关于查询我们知道有filter( ) ,values( ) , get( ) ,exclude( ) ,如果是聚合分组,还会用到aggregate和annotate,甚至还有万能的双下划线,但是...
  • Python-mysql数据库高级查询

    千次阅读 2018-03-11 18:36:56
    Python-mysql数据库高级查询 本节知识点 知识点一: 筛选条件 知识点二: 排序、去重 知识点三: 聚合与分组 知识点四: 限制与分页 Part one :数据准备 执行环境:Ubuntu16.04_server_32bit 运行软件:...
  • python 数据库查询条件‘不等于’

    千次阅读 2018-10-11 15:46:46
    python 数据库查询条件‘不等于’ 当在做数据库查询的时候,想根据业务需求进行条件的筛选或过滤, 但是django封装的数据库语句中没有 ‘不等于’ 查询操作。 例如,通过以下语句进行‘不等于查询’ data = User…...
  • 1.python 数据库查询条件不等于 当在做数据库查询的时候,想根据业务需求进行条件的筛选或过滤, 但是django封装的数据库语句中没有 ‘不等于’ 查询操作。 2.例如:通过以下语句进行‘不等于查询’ data = User…...
  • 数据库查询查询条件查询 查询 查询所有字段 select * from students; 查询指定字段 select name from students; 使用as给字段起别名 select 别名, 字段 … from 表名 as 别名; select name as 姓名, age ...
  • #encoding=utf-8import MySQLdbclass Sjb_data(): def __init__(self): self.url = url def mysql(self,sql): db = MySQLdb.connect(host='IP地址',port = 3306,user=r'用户名',passwd='密码',db ='数据库...
  • F查询(取字段的值)关于查询我们知道有filter( ) ,values( ) , get( ) ,exclude( ) ,如果是聚合分组,还会用到aggregate和annotate,甚至还有万能的双下划线,但是如果有这样一个需求,查询a表中的aa字段数值大于b表...
  • 总体内容一、数据准备、基本的查询二、条件查询三、排序四、聚合、分组五、分页六、连接查询(多表的时候有用,单表的时候几乎没有用)七、自关联八、子查询九、总结一、数据准备、基本的查询1.1、创建数据库 ...
  • Python 数据库查询条件‘不等于’

    千次阅读 2018-11-20 10:38:22
    当在做数据库查询的时候,想根据业务需求进行条件的筛选或过滤, 但是django封装的数据库语句中没有 ‘不等于’ 查询操作。   例如,通过以下语句进行‘不等于查询’,此语句会报错 data = User.objects....
  • 本次构造数据主要涉及到在某个表里面批量添加数据、在关联的几个表中同步批量添加数据、批量查询某个表中符合条件的数据、批量更新某个表中符合条件的数据等。二、数据添加即批量添加数据到某个表中。insert_dat...
  • 前面我们介绍了单张表的查询,包括模糊查询、分组、排序、各种筛选条件等等操作,在实际应用中,查询的数据往往不止局限在一张表里,通常需要多张表在一起进行组合查询,今天我们将会对Mysql当中的多张有关联的表...
  • SQLAlchemy在使用Python操作数据库时,可以使用SQLAlchemy库:SQLAlchemy 是python 操作数据库的一个库。能够进行 orm 映射官方文档 sqlchemySQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,...
  • 本次构造数据主要涉及到在某个表里面批量添加数据、在关联的几个表中同步批量添加数据、批量查询某个表中符合条件的数据、批量更新某个表中符合条件的数据等。二、数据添加即批量添加数据到某个表中。insert_dat...
  • 单表查询的语法: select distinct 字段1,字段2,字段3 from 库.表 where 条件 group by 分组条件 having 过滤 order by 排序字段 limit n; 关键字的执行优先级 from where group by having select distinct ...
  • Python中操作数据库

    2019-07-16 18:20:03
    数据都是在内存中的,当程序终止的时候,通常都需要将数据保存到磁盘上,前面我们学习了将数据写入文件,保存在磁盘上,为了便于程序保存和读取数据,而且,能直接通过条件快速查询到指定的数据,就出现了数据库这种...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 553
精华内容 221
关键字:

python条件查询数据库

python 订阅