当前位置: 首页 > 面试题库 >

通过MySQLdb创建函数

壤驷旭
2023-03-14
问题内容

在python中使用MySQLdb库时,如何定义多语句函数或过程?

例:

import MySQLdb

db = MySQLdb.connect(db='service')

c = db.cursor()

c.execute("""DELIMITER //
CREATE FUNCTION trivial_func (radius float) 
    RETURNS FLOAT

    BEGIN
    IF radius > 1 THEN
        RETURN 0.0;
    ELSE
        RETURN 1.0;
    END IF;
END //

DELIMITER ;""")

这将创建以下回溯:

Traceback (most recent call last):
  File "proof.py", line 21, in <module>
    DELIMITER ;""")
  File "build/bdist.macosx-10.5-i386/egg/MySQLdb/cursors.py", line 173, in execute
  File "build/bdist.macosx-10.5-i386/egg/MySQLdb/connections.py", line 35, in defaulterrorhandler
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER //\nCREATE FUNCTION trivial_func (radius float) \n    RETURNS FLOAT\n\n   ' at line 1")

如果我将相同的SQL直接复制到mysql shell客户端中,它将按预期工作


问题答案:

DELIMITER命令是内置的MySQL
Shell客户端,只有该程序(和MySQL查询浏览器)才能识别。DELIMITER如果您直接通过API执行SQL语句,则无需使用。

的目的DELIMITER是帮助您避免CREATE FUNCTION在语句本身可以包含分号字符时避免终止语句。这在shell客户端中很重要,在该客户端中,默认情况下,分号终止SQL语句。您需要将语句终止符设置为其他字符,以便提交函数(或触发器或过程)的主体。

CREATE FUNCTION trivial_func (radius float) 
    RETURNS FLOAT

    BEGIN
    IF radius > 1 THEN
        RETURN 0.0; <-- does this semicolon terminate RETURN or CREATE FUNCTION?
    ELSE
        RETURN 1.0;
    END IF;
END

由于API通常允许您一次提交一个SQL语句,因此没有歧义-接口知道函数定义主体内的任何分号都不会终止整个CREATE FUNCTION语句。因此,无需使用来更改语句终止符DELIMITER



 类似资料:
  • 问题内容: 项目配置: 数据库-MySQL 5.7 orm-Hibernate 4.3.11.Final / JPA 1.3.1.RELEASE Liquibase 3.4.2 当我仅从Liquibase从workBeanch运行脚本时,我的问题不存在。 我的SQL脚本看起来像这样: 确定并记录: 问题答案: 如果您使用的是yaml文件,则这是配置 确保stripComments应该为false,

  • 是否可以像使用WordPress用户一样通过编程方式创建客户。显然,WooCommerce用户共享一些相同的WordPress用户字段,还有其他内容需要设置,如账单/邮政地址。 以前有人做到过吗?我在他们网站上的WooCommerce API/函数列表中找不到任何内容。 编辑:刚刚找到这个:http://docs.woothemes.com/wc-apidocs/function-wc_creat

  • 问题内容: 我正在转换C api> Java,并且具有以下函数原型。 我想按预期返回状态,以整数形式返回“类型”,以字符串形式返回“值”(不被释放) 从文档中,我发现您创建了两个可以保留返回值的结构。 有人可以帮我做第一个吗? 问题答案: 假设函数声明存在于一个名为header.h的文件中,则可以执行以下操作: 这将隐藏“实数” ,而是替换为在(不可修改的)结构中返回输出参数和调用结果的版本。 (

  • 问题内容: 我正在尝试显示10位玩家的表格。我通过ajax获取数据,并将其作为道具传递给我的孩子。 现在,我需要一个列表组件来渲染播放器: 这给了我一个。 我不确定发生了什么,我的控制台日志显示了正确的数据,但是以某种方式我无法在返回中访问它。 我想念什么? 问题答案: 在组件中,您需要更改初始状态,因为您正在尝试使用for,但是此属性是导致错误的原因。 此外,如在是你应该从它那里得到的属性

  • 在我的Spring项目中,我使用HiberNate将我的实体类导出到以前创建的数据库。但是这需要最终用户知道如何在数据库管理器系统中创建数据库(目前我正在使用Postgreql)。 是否有任何方法,只要给定安装postgreql的机器(以及第一次运行应用程序时提供的用户名和密码),HiberNate在服务器中创建一个新数据库(如果它不存在)?

  • 本文向大家介绍php compact 通过变量创建数组,包括了php compact 通过变量创建数组的使用技巧和注意事项,需要的朋友参考一下 php compact 通过变量创建数组 compact函数通过一个或多个变量建立一个数组,改数组包括变量名和它们的值。 该函数的行为与extract()正好相反。 基本语法 array compact ( mixed $varname [, mixed