在python中读取外部sql脚本

2023-11-21

我正在学习如何在 python 中执行 SQL(我知道 SQL,而不是 Python)。

我有一个外部 sql 文件。它创建数据并将其插入到三个表“Zookeeper”、“Handles”、“Animal”中。

然后我有一系列查询来运行表。以下查询位于我在 python 脚本顶部加载的 Zookeeper.sql 文件中。前两个的示例是:

--1.1

SELECT ANAME,zookeepid
FROM ANIMAL, HANDLES
WHERE AID=ANIMALID;

--1.2

SELECT ZNAME, SUM(TIMETOFEED)
FROM ZOOKEEPER, ANIMAL, HANDLES
WHERE AID=ANIMALID AND ZOOKEEPID=ZID
GROUP BY zookeeper.zname;

这些在 SQL 中都执行得很好。现在我需要从 Python 中执行它们。我已获得并完成了要在文件中读取的代码。然后执行循环中的所有查询。

1.1 和 1.2 是我感到困惑的地方。我相信在循环中,这是我应该放入一些内容来运行第一个和第二个查询的行。

结果 = c.execute("SELECT * FROM %s;" % 表);

但什么?我想我错过了一些非常明显的东西。我认为让我失望的是 % 表。在查询1.1和1.2中,我不是创建表,而是查找查询结果。

我的整个Python代码如下。

import sqlite3
from sqlite3 import OperationalError

conn = sqlite3.connect('csc455_HW3.db')
c = conn.cursor()

# Open and read the file as a single buffer
fd = open('ZooDatabase.sql', 'r')
sqlFile = fd.read()
fd.close()

# all SQL commands (split on ';')
sqlCommands = sqlFile.split(';')

# Execute every command from the input file
for command in sqlCommands:
    # This will skip and report errors
    # For example, if the tables do not yet exist, this will skip over
    # the DROP TABLE commands
    try:
        c.execute(command)
    except OperationalError, msg:
        print "Command skipped: ", msg


# For each of the 3 tables, query the database and print the contents
for table in ['ZooKeeper', 'Animal', 'Handles']:


    **# Plug in the name of the table into SELECT * query
    result = c.execute("SELECT * FROM %s;" % table);**

    # Get all rows.
    rows = result.fetchall();

    # \n represents an end-of-line
    print "\n--- TABLE ", table, "\n"

    # This will print the name of the columns, padding each name up
    # to 22 characters. Note that comma at the end prevents new lines
    for desc in result.description:
        print desc[0].rjust(22, ' '),

    # End the line with column names
    print ""
    for row in rows:
        for value in row:
            # Print each value, padding it up with ' ' to 22 characters on the right
            print str(value).rjust(22, ' '),
        # End the values from the row
        print ""

c.close()
conn.close()

您的代码已经包含了一种从指定的 sql 文件执行所有语句的漂亮方法

# Open and read the file as a single buffer
fd = open('ZooDatabase.sql', 'r')
sqlFile = fd.read()
fd.close()

# all SQL commands (split on ';')
sqlCommands = sqlFile.split(';')

# Execute every command from the input file
for command in sqlCommands:
    # This will skip and report errors
    # For example, if the tables do not yet exist, this will skip over
    # the DROP TABLE commands
    try:
        c.execute(command)
    except OperationalError, msg:
        print("Command skipped: ", msg)

将其包装在一个函数中,您可以重用它。

def executeScriptsFromFile(filename):
    # Open and read the file as a single buffer
    fd = open(filename, 'r')
    sqlFile = fd.read()
    fd.close()

    # all SQL commands (split on ';')
    sqlCommands = sqlFile.split(';')

    # Execute every command from the input file
    for command in sqlCommands:
        # This will skip and report errors
        # For example, if the tables do not yet exist, this will skip over
        # the DROP TABLE commands
        try:
            c.execute(command)
        except OperationalError, msg:
            print("Command skipped: ", msg)

使用它

executeScriptsFromFile('zookeeper.sql')

你说你很困惑

result = c.execute("SELECT * FROM %s;" % table);

在 Python 中,您可以使用称为字符串格式化的方法向字符串添加内容。

你有一个字符串"Some string with %s"对于 %s,这是其他内容的占位符。要替换占位符,请在字符串后添加 %(“您想要替换它的内容”)

ex:

a = "Hi, my name is %s and I have a %s hat" % ("Azeirah", "cool")
print(a)
>>> Hi, my name is Azeirah and I have a Cool hat

虽然这个例子有点幼稚,但应该很清楚。

怎么办

result = c.execute("SELECT * FROM %s;" % table);

意思是,它是否用表变量的值替换 %s。

(创建于)

for table in ['ZooKeeper', 'Animal', 'Handles']:


# for loop example

for fruit in ["apple", "pear", "orange"]:
    print(fruit)
>>> apple
>>> pear
>>> orange

如果还有什么问题可以戳我。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在python中读取外部sql脚本 的相关文章

  • 使用 Django 的 post_save() 信号

    我有两张桌子 class Advertisement models Model created at models DateTimeField auto now add True author email models EmailField
  • 用 Python 编写一个无操作或虚拟类

    假设我有这样的代码 foo fooFactory create 由于种种原因 fooFactory create 可能无法创建实例Foo 如果可以的话我想要fooFactory create 返回一个虚拟 无操作对象 这个对象应该是完全惰性
  • Python 中 genfromtxt() 的可变列数?

    我有一个 txt具有不同长度的行的文件 每一行都是代表一条轨迹的一系列点 由于每条轨迹都有自己的长度 因此各行的长度都不同 也就是说 列数从一行到另一行不同 据我所知 genfromtxt Python 中的模块要求列数相同 gt gt g
  • 在 python-docx 中搜索和替换

    我有一个包含以下字符串的文档 模板 你好 我的名字是鲍勃 鲍勃是一个很好的名字 我想使用 python docx 打开此文档并使用 查找和替换 方法 如果存在 来更改每个字符串 Bob gt Mark 最后 我想生成一个新文档 其中包含字符
  • 在 Doctrine DQL 中选择 count() ,并使用左连接多对多单向关系,其中用户没有关系特定组

    情况 我尝试在 DQL 中为不属于特定组的用户选择 count 标准ManyToMany之间的单向关系User and Group实体来自FOSUserBundle and SonataUserBundle 系统 Symfony 2 5 D
  • Python3 查找 2 个列表中有多少个差异才能相等

    假设我们有 2 个列表 always具有相同的长度和always包含字符串 list1 sot sot ts gg gg gg list2 gg gg gg gg gg sot 我们需要找到 其中有多少项list2应该改变 以便它等于lis
  • python ttk treeview:如何选择并设置焦点在一行上?

    我有一个 ttk Treeview 小部件 其中包含一些数据行 如何设置焦点并选择 突出显示 指定项目 tree focus set 什么也没做 tree selection set 0 抱怨 尽管小部件明显填充了超过零个项目 但未找到项目
  • 将 subprocess.Popen 的输出通过管道传输到文件

    我需要启动一些长时间运行的进程subprocess Popen 并希望拥有stdout and stderr从每个自动管道到单独的日志文件 每个进程将同时运行几分钟 我想要两个日志文件 stdout and stderr 每个进程当进程运行
  • 部署 dacpac 所需的权限

    我正在尝试使用 sqlpackage exe 在租户上部署 dacpac 目前 我正在向将部署此功能的帐户授予 SysAdmin 或 db owner 权限 并且它工作正常 但在生产中 如果目标租户数据库属于其他应用程序 我可能无法获得这些
  • 多级排序

    我有一个表 其中包含一些记录 其中包含名称 评级等字段 我首先想要根据评级将结果限制为 20 进行排序 然后在此结果集上想要进一步应用基于名称的排序 我知道要排序我们需要使用像这样的查询 Select from table order by
  • Java 中的 ExecuteUpdate sql 语句不起作用

    我正在学习如何将 SQL 与 Java 结合使用 我已成功安装 JDBC 驱动程序 并且能够从数据库读取记录并将其打印在屏幕上 我的问题发生在尝试执行更新或插入语句时 没有任何反应 这是我的代码 问题所在的方法 public static
  • Pandas:根据列名进行列的成对乘法

    我有以下数据框 gt gt gt df pd DataFrame ap1 X 1 2 3 4 as1 X 1 2 3 4 ap2 X 2 2 2 2 as2 X 3 3 3 3 gt gt gt df ap1 X as1 X ap2 X a
  • 在wxpython中使用wx.TextCtrl并在按钮单击后显示数据的简单示例 - wx新手

    我正在学习 python 并尝试使用 wxpython 进行 UI 开发 也没有 UI exp 我已经能够创建一个带有面板 按钮和文本输入框的框架 我希望能够在文本框中输入文本 并让程序在单击按钮后对输入框中的文本执行操作 我可以获得一些关
  • 在 Mac 上安装 Pygame 到 Enthought 构建中

    关于在 Mac 上安装 Pygame 有许多未解答的问题 但我将在这里提出我的具体问题并希望得到答案 我在 Mac 上安装 Pygame 时遇到了难以置信的困难 我使用 Enthought 版本 EPD 7 3 2 32 位 它是我的默认框
  • 字典中列表中仅有的几个索引的总和

    如果我有这种类型的字典 a dictionary dog white 3 5 black 6 7 Brown 23 1 cat gray 5 6 brown 4 9 bird blue 3 5 green 1 2 yellow 4 9 mo
  • 在 Windows 上使用 IPython 笔记本时出现 500 服务器错误

    我刚刚在 Windows 7 Professional 64 位上全新安装了 IPython 笔记本 我采取的步骤是 从以下位置安装 Python 3 4 1http python org http python org gt pip in
  • 使用 lambda 函数更改属性值

    我可以使用 lambda 函数循环遍历类对象列表并更改属性值 对于所有对象或满足特定条件的对象 吗 class Student object def init self name age self name name self age ag
  • Plotly:如何避免巨大的 html 文件大小

    我有一个 3D 装箱模型 它使用绘图来绘制输出图 我注意到 绘制了 600 个项目 生成 html 文件需要很长时间 文件大小为 89M 这太疯狂了 我怀疑可能存在一些巨大的重复 或者是由单个项目的 add trace 方法引起的 阴谋 为
  • PyQt 中的线程和信号问题

    我在 PyQt 中的线程之间进行通信时遇到一些问题 我使用信号在两个线程 发送者和监听者 之间进行通信 发送者发送消息 期望被监听者接收 但是 没有收到任何消息 谁能建议可能出了什么问题 我确信这一定很简单 但我已经环顾了几个小时但没有发现
  • 如何在SqlAlchemy中执行“左外连接”

    我需要执行这个查询 select field11 field12 from Table 1 t1 left outer join Table 2 t2 ON t2 tbl1 id t1 tbl1 id where t2 tbl2 id is

随机推荐

  • 无法将重复值插入到唯一索引中[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 自答问题以供将来参考 如果您有一个已删除并重新添加内容的表 则在插入 ID 等于现有 I
  • 本机模式下 SQL Reporting Services 2008 启动缓慢

    在当天的第一个报告请求时 或者在未知的时间段内没有报告请求时 我们会遇到启动速度缓慢的情况 在 SQL Reporting Server 2005 安装中 我们将设置应用程序池以避免回收 Reporting Services 应用程序 但是
  • 根据缩放级别分组/取消分组 MKAnnotation(并保持快速)

    我有一个地图视图 其中有很多注释 其中大多数彼此非常接近 我想要做的类似于 iOS 上的照片应用程序 当注释彼此太接近时 它们会被分组 每当您缩小时 如果它们相距太远 它们就会取消分组 我见过这个问题已经 但给出的答案并不是我真正想要的 我
  • 在本地主机上使用“meteor mongo”但使用远程数据库

    我正在学习望远镜教程 我创建了一个 client collections myfile js 我在本地主机上 但我正在使用 MongoHQ 上托管的远程数据库启动 Meteor 而不是使用 Meteor 的本地数据库 在本教程中 我被告知通
  • 确保 Android WebView 安全的最佳实践检查列表

    我正在开发一个主要用 Native 编写并支持 Ice Cream Sandwich 的应用程序 但是 我需要添加一些 WebView 关于 WebView 安全性有很多讨论 当我使用 setJavaScriptEnabled true 时
  • 提供存储在 SQLAlchemy LargeBinary 列中的图像

    我想上传一个文件并将其存储在数据库中 我创建了一个 LargeBinary 列 logo db Column db LargeBinary 我读取上传的文件并将其存储在数据库中 files request files getlist fil
  • 使用模式进行部分字符串匹配

    我需要在 R 中编写一个查询来匹配列名称中的部分字符串 我正在寻找类似于 SQL 中的 LIKE 运算符的东西 例如 如果我知道字符串的开头 中间或结尾部分 我会按照以下格式编写查询 LIKE beginning middle 在 SQL
  • 模式匹配是多余的

    Haskell 堆栈构建工具 我有代码 quote Char quote doubleQuote Char doubleQuote isBorder Char gt Bool isBorder quote True isBorder dou
  • body 标签内的 document.ready

    我有一个包含通用 HTML 标头的 Web 应用程序 因此我想在每个页面中放置特定于页面的脚本 而不是加载所有内容 我尝试把document ready 接近尾声时一个页面 它似乎工作正常 将其放在那里而不是放在里面是否有任何潜在危险 雅虎
  • 使 DHTMLEd 控件用弯引号替换直引号的代码

    我有一个旧的 VB6 应用程序 它使用 DHTML 编辑控件作为 HTML 编辑器 Microsoft DHTML 编辑控件 又名 DHTMLEd 可能只不过是一个在内部使用 IE 自己的本机编辑功能的 IE 控件 I d like to
  • git 2.20.1.windows.1 不支持 http.sslverify=false

    在 Windows 版 git 的最新更新 事实上 我进行了新安装 之后 我无法再通过 https 连接到特定的远程存储库 它位于一个内部服务器上 该服务器使用自签名证书也已过期一段时间 不要问 它曾经与 Windows 2 16 x ii
  • 如何抑制这个输出?

    我在 R Markdown 文件中有一个代码块 r library UsingR 使用 knitHTML 进行编译会产生以下输出 在我更新到最新版本的 R 和 RStudio 之前从未发生过这种情况 Loading required pac
  • AppEngine 实例的许多自定义域

    对于我们在 AppEngine 上运行的电子商务服务 我们希望为客户提供在其自定义域上运行商店的选项 例如 www mystore com 而不是 www enstore com mystore 从用户的角度来看 我希望他们在首选项屏幕中输
  • 如何在 Electron 中设置 chromium 命令行标志?

    我正在开发一个 Electron 应用程序 需要启用以下 Chromium 标志GuestViewCrossProcessFrames使缩放与 webview 一起工作 我尝试在 main js 中调用以下行 但它似乎不起作用 还尝试为 B
  • Facebook Graph API 限制 [重复]

    这个问题在这里已经有答案了 我进行了研究 得出的结论是 Facebook Graph API 限制是每个访问令牌每 600 秒 600 个请求 由于我仅使用新的 Graph API 因此我从未遇到过手动传递访问令牌的需要 我相信人们需要继续
  • javascript html select动态添加optgroup和选项

    假设我有一个
  • 如何使用 SQL Server (Server Management Studio) 存储和检索图像

    我在尝试将文件插入 SQL Server 数据库时遇到困难 我会尽力将其分解 我应该使用什么数据类型来存储图像文件 jpeg png gif 等 现在我的桌子正在使用image数据类型 但我很好奇是否varbinary将是一个更好的选择 我
  • 使用python提取文本文件中两个字符串之间的值

    假设我有一个包含以下内容的文本文件 fdsjhgjhg fdshkjhk Start Good Morning Hello World End dashjkhjk dsfjkhk 现在我需要编写一个 Python 代码 它将读取文本文件并将
  • MySQL查询共同好友[重复]

    这个问题在这里已经有答案了 可能的重复 MYSQL选择共同好友 我有一张友谊表 友谊仅存储在一行中 所以不存在重复的条目 id Person1 Person2 status 1 1 2 friend 2 1 3 friend 3 2 3 f
  • 在python中读取外部sql脚本

    我正在学习如何在 python 中执行 SQL 我知道 SQL 而不是 Python 我有一个外部 sql 文件 它创建数据并将其插入到三个表 Zookeeper Handles Animal 中 然后我有一系列查询来运行表 以下查询位于我