在开始连接数据库之前,首先要确保已经安装了相应的数据库驱动库,对于SQLite数据库,Python自带了sqlite3
库,无需额外安装,如果是连接其他类型的数据库,如MySQL、PostgreSQL等,则需要安装对应的第三方库,例如mysql connector python
用于连接MySQL数据库,psycopg2
用于连接PostgreSQL数据库等,这里以sqlite3
为例,先导入该库:
import sqlite3
使用sqlite3.connect()
方法来创建一个与数据库的连接对象,该方法需要传入一个参数,即数据库文件的路径,如果指定的数据库文件不存在,sqlite3
会自动创建一个新数据库文件,以下是示例代码:
定义数据库文件路径 db_path = "example.db" 创建与数据库的连接对象 conn = sqlite3.connect(db_path)
在上述代码中,db_path
变量存储了数据库文件的路径,这里假设数据库文件名为example.db
,它会被创建在当前工作目录下(如果不存在的话)。conn
就是创建好的连接对象,后续可以通过这个对象来执行各种数据库操作。
要执行SQL语句,需要通过连接对象创建一个游标对象,游标对象就像一个指针,用于在数据库中定位数据并进行操作,使用连接对象的cursor()
方法可以创建游标对象,如下所示:
创建游标对象 cursor = conn.cursor()
cursor
就是创建好的游标对象,通过它可以执行SQL查询、插入、更新、删除等操作。
1、执行查询语句(SELECT)
要查询一个名为users
表中的所有数据,可以使用游标对象的execute()
方法执行查询语句,如下:
执行查询语句 cursor.execute("SELECT FROM users") 获取查询结果 results = cursor.fetchall() 打印查询结果 for row in results: print(row)
在上述代码中,cursor.execute("SELECT FROM users")
执行了查询users
表所有数据的SQL语句。fetchall()
方法会获取查询结果的所有行,并将其作为一个列表返回,其中每个元素都是一个元组,代表一行数据,然后通过循环遍历这个结果列表并打印每一行数据。
2、执行插入语句(INSERT)
向users
表中插入一条新记录,可以使用以下代码:
准备插入的数据 data = ('John', 'Doe', 'john.doe@example.com') 执行插入语句 cursor.execute("INSERT INTO users (first_name, last_name, email) VALUES (?, ?, ?)", data) 提交事务,确保插入操作生效 conn.commit()
这里,data
变量包含了要插入的数据,分别是用户的名、姓和电子邮件地址。cursor.execute()
方法中的SQL语句使用了占位符?
,然后将实际的数据通过第二个参数传递给execute()
方法,这样可以防止SQL注入攻击,执行完插入语句后,需要调用连接对象的commit()
方法提交事务,以确保插入操作真正生效并保存到数据库中。
3、执行更新语句(UPDATE)
如果要更新users
表中某条记录的电子邮件地址,可以使用如下代码:
指定要更新的记录的条件(假设根据用户名更新) condition = ('John',) 准备更新后的数据 new_email = 'john.newemail@example.com' 执行更新语句 cursor.execute("UPDATE users SET email = ? WHERE first_name = ?", (new_email, condition[0])) 提交事务 conn.commit()
在上述代码中,首先指定了要更新的记录的条件,这里是根据用户名John
来定位要更新的记录,然后准备了新的电子邮件地址数据,并通过cursor.execute()
方法执行更新语句,将符合条件的记录的电子邮件地址更新为新的值,同样,执行完更新语句后需要提交事务。
4、执行删除语句(DELETE)
如果要删除users
表中某条记录,例如删除用户名为John
的记录,可以使用以下代码:
指定要删除的记录的条件 condition = ('John',) 执行删除语句 cursor.execute("DELETE FROM users WHERE first_name = ?", condition) 提交事务 conn.commit()
这里通过指定用户名为条件,执行删除语句将符合条件的记录从users
表中删除,然后提交事务。
在完成所有的数据库操作后,需要关闭游标和连接,以释放资源,可以使用以下代码:
关闭游标 cursor.close() 关闭连接 conn.close()
先关闭游标对象,再关闭连接对象,这样可以确保数据库资源被正确释放。
以下是两个相关问答FAQs:
问题1:如果连接数据库时出现“数据库文件找不到”的错误,可能是什么原因?如何解决这个问题?
答:可能的原因有以下几种:一是确实没有在指定路径下创建数据库文件;二是指定的路径错误,比如路径中存在拼写错误或者权限问题导致无法访问该路径,解决方法是:首先检查代码中指定的数据库文件路径是否正确,如果路径有误则修改为正确的路径;如果路径正确但仍然找不到文件,可以尝试手动在指定路径下创建一个空的数据库文件(对于SQLite数据库来说是一个以.db
为后缀的文件),然后再运行代码尝试连接。
问题2:为什么在执行插入、更新或删除语句后要调用commit()
方法?不调用会怎样?
答:在数据库操作中,执行插入、更新或删除等操作时,这些操作通常会先在事务中进行,事务是一组作为单个逻辑单元执行的SQL语句,调用commit()
方法的作用是将事务提交到数据库,使其对数据库的更改永久生效,如果不调用commit()
方法,那么这些更改只会存在于事务中,一旦程序出现异常或者遇到断电等情况,这些未提交的更改将会丢失,数据库不会真正被修改,为了确保对数据库的操作能够真正生效并保存下来,在执行完插入、更新或删除等操作后必须调用commit()
方法提交事务。