作为目前更受欢迎的编程语言之一,Python已经成为了许多开发人员的首选语言。Python的优点包括代码易读、语法简单、大量支持库等优点。与此同时,Python的生态系统也非常丰富,包含了大量的第三方库,可用于执行各种各样的任务。
其中,Python在操作数据库方面表现得尤为出色。Python可以运用不同的库连接和操作多种类型的数据库,这使得它成为了数据科学家和软件开发人员更受欢迎的语言之一。在本文中,我们将介绍在Python中使用SQLAlchemy和Psycopg2库操作数据库的方法。
SQLAlchemy库
SQLAlchemy是一个开源Python库,用于操作关系数据库。它提供了一种简单且灵活的方式,用Python语言操作关系型数据库(SQL数据库)。 SQLalchemy被广泛应用于Web应用程序中,如Flask、Django、Bottle等框架。SQLAlchemy通过ORM,提供了一种类似于SQL语言的操作方式。
安装SQLAlchemy
要使用SQLAlchemy,需要在Python环境中安装它。可以通过以下方式安装:
“`python
!pip install sqlalchemy
“`
连接数据库
在使用SQLAlchemy库之前,必须先建立与数据库的连接。为此,需要定义数据库的URL,该URL包含以下元素:
– 数据库引擎(dialect) – 在SqlAlchemy中,这通常是一个带Chrome或mysql的名称
– 连接的用户名和密码
– 数据库主机和端口
– 数据库名称
下面是一个连接到SQL服务器的示例:
“`python
from sqlalchemy import create_engine
engine = create_engine(‘mssql+pyodbc://user:pass@dns’)
“`
在上面的示例中,创建了一个SQLAlchemy引擎,以便使用ODBC连接来连接到SQL服务器。可以将engine变量用于打开数据库连接的控制。完成之后,就可以使用SQLAlchemy来执行SQL操作。
执行SQL查询
可使用SQLAlchemy CRUD(CRUD(Create, Read, Update, Delete)操作。
下面是一个从本地SQLite数据库创建表格的示例:
“`python
from sqlalchemy import create_engine, Table, Column, Integer, MetaData
engine = create_engine(‘sqlite:///some.db’)
metadata = MetaData()
table = Table(‘mytable’, metadata,
Column(‘id’, Integer, primary_key=True),
Column(‘name’, String),
Column(‘age’, Integer),
)
metadata.create_all(engine)
“`
在上面的示例中,安装并创建Meta到和表的定义。这个表在SQLite数据库中使用用户ID、名称和年龄列创建一个列。结果表User是由元数据对象的调用创建的。调用metadata.create_all(engine)将表创建到已定义的数据库中。
现在,使用SQLAlchemy来执行SQL SELECT语句从User表中选择所有条目的示例。
“`python
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
from sqlalchemy.sql import select
engine = create_engine(‘sqlite:///some.db’)
metadata = MetaData()
mytable = Table(‘mytable’, metadata,
Column(‘id’, Integer, primary_key=True),
Column(‘name’, String),
Column(‘age’, Integer),
)
conn = engine.connect()
select_st = select([mytable])
result = conn.execute(select_st)
for row in result:
print(row)
“`
在此示例中,从mytable中选择了所有条目,每个条目都包含一个id、name和age字段。然后使用engine.connect()打开一个数据库连接,该连接可以执行SQL查询。使用conn.execute(select_all)执行查询,并将结果迭代打印到命令行中。
Psycopg2
与SQLAlchemy一样,Psycopg2是一种与Python库兼容的PostgreSQL数据库开发库。它可以用来连接、查询、读写和管理PostgreSQL数据库。一些典型的应用场景包括后端开发、数据科学、数据分析、GIS、Web应用程序和云计算等。
安装Psycopg2
在Python环境中,可以使用以下安装psycopg2:
“`python
!pip install psycopg2-binary
“`
连接到数据库
连接到PostgreSQL数据库与连接到其他数据库类似。类似地,必须指定连接字符串(dsn),该字符串包含以下信息:
– 主机名、端口号
– 用户名
– 密码
– 数据库名
可以使用psycopg2.connect()来创建连接:
“`python
import psycopg2
dsn_database = “someDatabase”
dsn_hostname = “mydbinstance.somehost.net”
dsn_port = “5432”
dsn_uid = “someUser”
dsn_pwd = “secret”
conn_string = “host=”+dsn_hostname+” port=”+dsn_port+” dbname=”+dsn_database+” user=”+dsn_uid+” password=”+dsn_pwd
conn = psycopg2.connect(conn_string)
“`
在上面的示例中,将所有连接信息添加到一个连接字符串中,并使用psycopg2.connect()创建连接。
执行SQL查询
下面是一个使用Psycopg2执行SQL查询的示例。在此示例中,创建了一个数据库表(employees),并向其添加一些数据。接下来,以选择所有记录并打印结果的方式使用SELECT查询对表执行操作。
“`python
#!/usr/bin/python
import psycopg2
def mn():
conn_string = “host=’localhost’ dbname=’mydatabase’ user=’myusername’ password=’mypassword'”
try:
conn = psycopg2.connect(conn_string)
cursor = conn.cursor()
# 创建employees表
cursor.execute(“CREATE TABLE employees (id SERIAL PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), hire_date DATE)”)
# 插入一个新的employee
cursor.execute(“INSERT INTO employees (first_name,last_name,hire_date) VALUES (‘John’, ‘Doe’, ‘2023-01-01’)”)
# 获取所有employees
cursor.execute(“SELECT * FROM employees”)
rows = cursor.fetchall()
for row in rows:
print(row)
cursor.close()
conn.close()
except Exception as e:
print(str(e))
if __name__ == “__mn__”:
mn()
“`
在上面的示例中,首先我们创建一个employees表格,它包含id(自增长主键),first_name,last_name和hire_date字段。然后,我们添加了一个名为John Doe的新员工。使用SELECT获取并打印所有employee的结果。
在本文中,我们介绍了Python中使用SQLAlchemy和Psycopg2库操作数据库的方法。无论你使用的是何种数据库,都可以使用Python来操作数据库。Python在操作数据库方面的优点包括简洁易读的代码、广泛可用的库以及可运用不同的库连接和操作多种类型的数据库等。无论你是数据科学家、软件开发人员还是其他人员,掌握Python操作数据库的技能对你的工作和学习都非常有帮助。
相关问题拓展阅读:
以 Debian/Ubuntu 为例(请确保有管理员权限):
1.MySQL
代码如者粗伍下:
apt-get install mysql-server
apt-get install mysql-client
apt-get install libmysqlclient15-dev
2.python-mysqldb
代码如下:
apt-get install python-mysqldb
3.easy_install
代码如下:
wget
python ez_setup.py
4.MySQL-Python
代码如下:
easy_install MySQL-Python
5.SQLAlchemy
代码如下:
easy_install SQLAlchemy
6、安装完成后使用下面代码测试连接
代码如下:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
DB_CONNECT_STRING = ‘mysql+
engine = create_engine(DB_CONNECT_STRING, echo=True)
DB_Session = sessionmaker(bind=engine)
session = DB_Session()
7、数据操作(增删改查)
代码如下:
from sqlalchemy import func, or_, not_
user = User(name=’a’)
session.add(user)
user = User(name=’b’)
session.add(user)
user = User(name=’a’)
session.add(user)
user = User()
session.add(user)
session.commit()
query = session.query(User)
print query # 显示SQL 语句
print query.statement # 同上
for user in query: # 遍历时查询
print user.name
print query.all() # 返回的是一个类似列表的对象
print query.first().name # 记凳乱录不存在时,first() 会返回 None
# print query.one().name # 不存在,或有多行记录时会抛出异常
print query.filter(User.id == 2).first().name
print query.get(2).name # 以主键获取,等效于上句
print query.filter(‘id = 2’).first().name # 支首或持字符串
query2 = session.query(User.name)
print query2.all() # 每行是个元组
print query2.limit(1).all() # 最多返回 1 条记录
print query2.offset(1).all() # 从第 2 条记录开始返回
print query2.order_by(User.name).all()
print query2.order_by(‘name’).all()
print query2.order_by(User.name.desc()).all()
print query2.order_by(‘name desc’).all()
print session.query(User.id).order_by(User.name.desc(), User.id).all()
print query2.filter(User.id == 1).scalar() # 如果有记录,返回之一条记录的之一个元素
print session.query(‘id’).select_from(User).filter(‘id = 1’).scalar()
print query2.filter(User.id > 1, User.name != ‘a’).scalar() # and
query3 = query2.filter(User.id > 1) # 多次拼接的 filter 也是 and
query3 = query3.filter(User.name != ‘a’)
print query3.scalar()
print query2.filter(or_(User.id == 1, User.id == 2)).all() # or
print query2.filter(User.id.in_((1, 2))).all() # in
query4 = session.query(User.id)
print query4.filter(User.name == None).scalar()
print query4.filter(‘name is null’).scalar()
print query4.filter(not_(User.name == None)).all() # not
print query4.filter(User.name != None).all()
print query4.count()
print session.query(func.count(‘*’)).select_from(User).scalar()
print session.query(func.count(‘1’)).select_from(User).scalar()
print session.query(func.count(User.id)).scalar()
print session.query(func.count(‘*’)).filter(User.id > 0).scalar() # filter() 中包含 User,因此不需要指定表
print session.query(func.count(‘*’)).filter(User.name == ‘a’).limit(1).scalar() == 1 # 可以用 limit() 限制 count() 的返回数
print session.query(func.sum(User.id)).scalar()
print session.query(func.now()).scalar() # func 后可以跟任意函数名,只要该数据库支持
print session.query(func.current_timestamp()).scalar()
print session.query(func.md5(User.name)).filter(User.id == 1).scalar()
query.filter(User.id == 1).update({User.name: ‘c’})
user = query.get(1)
print user.name
user.name = ‘d’
session.flush() # 写数据库,但并不提交
print query.get(1).name
session.delete(user)
session.flush()
print query.get(1)
session.rollback()
print query.get(1).name
query.filter(User.id == 1).delete()
session.commit()
print query.get(1)
唔,貌似题主问题已经解决了,挺好的。我还是答一下,给后续需要的新手一点帮助。
这个问题经常难道新手一下,因为大部分教程里(包括经典
的《Flask
Web开发》一书),告诉了我们如何使用flask-sqlalchemy操作sqlite,但在生产环境(线上网站)上,我们肯定是则返肆使用MySQL或其
他,而大部分的教程里,又告诉我们flask-sqlalchemy使用MySQL的方式是:
结果我们照葫芦画瓢的来一下,发现压根不行,写好的网站一跟数据库沾边就报错。
Python和MySQL是「两个国家的人」,他们互不相通,因而需要一个中间代理,让双方互通有无,跟翻译一样(这比喻不准确,但足够你明白意思就行)。翻译又有很多选择,不同的翻译各有特色。
题
主解决问题选择的翻译是「flask-mysqldb」,其背后的主子是「MySQL-python」。恩,说到这里你应该知道,「flask-xxx」
这样的包都是对背后主子进行了适合Flask封装的插件,跟包子皮一样,里面的馅才是重点,「flask-mysqldb」的馅是「MySQL-
python」。
而我要推荐的是另一个翻译:PyMySQL,这玩意的好处是可以做异步(「MySQL-python」也可以,个人口味罢了),简而言世闷之,网站访问量大了就需要考虑异步,现在别管这是啥子。孙轿这玩意的安装方式是:
pip install PyMySQL
之后,数据库连接由:
改为
mysql+
就可以了。
python 操作数据库的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python 操作数据库,Python轻松操作数据库,在python3下怎样用flask-sqlalchemy对mysql数据库操作的信息别忘了在本站进行查找喔。
香港服务器选创新互联,2H2G首月10元开通。
创新互联(www.cdcxhl.com)互联网服务提供商,拥有超过10年的服务器租用、服务器托管、云服务器、虚拟主机、网站系统开发经验。专业提供云主机、虚拟主机、域名注册、VPS主机、云服务器、香港云服务器、免备案服务器等。
网页题目:Python轻松操作数据库(python操作数据库)
标题网址:http://www.shufengxianlan.com/qtweb/news37/388687.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联