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

使用pyodbc时,SQL查询失败,但可在SQL中使用

孙翰墨
2023-03-14
问题内容

我在应该是一个非常简单的脚本方面遇到了麻烦。我只是想使用Python pyodbc模块创建一个新的SQL Server数据库。当我在SQL Server2012中执行该参数时,我尝试传递的“ sqlcommand”参数完美运行,但是此python脚本失败了。不知道出了什么问题,有人有什么想法吗?

import pyodbc, os

def create_db(folder, db_name):
    unc = r'\\arcsql\SDE\{0}'.format(folder)
    if not os.path.exists(unc):
        os.makedirs(unc)
    full_name = os.path.join(r'E:\SDE', folder, db_name)
    conn = pyodbc.connect("driver={SQL Server}; server=ArcSQL; database=master; Trusted_Connection=yes", automcommit=True) 
    cursor = conn.cursor()
    sqlcommand = """USE [master]
GO
CREATE DATABASE [{0}] ON PRIMARY
( NAME = N'{0}', FILENAME = N'{1}.mdf', SIZE = 4MB , MAXSIZE = 10MB, FILEGROWTH = 1MB )
LOG ON
( NAME = N'{0}_log', FILENAME = N'{1}_log.ldf', SIZE = 4MB , MAXSIZE = 10MB, FILEGROWTH = 10%)
GO

USE [{0}]
GO""".format(db_name, full_name)
    print sqlcommand

    cursor.execute(sqlcommand)
    print 'Created "{0}"'.format(db_name)

if __name__ == '__main__':
    #test
    create_db('_test', 'py_db_test')

和错误:

>>> 
USE [master]
GO
CREATE DATABASE [py_db_test2] ON PRIMARY
( NAME = N'py_db_test2', FILENAME = N'E:\SDE\_test\py_db_test2.mdf', SIZE = 4MB , MAXSIZE = 10MB, FILEGROWTH = 1MB )
LOG ON
( NAME = N'py_db_test2_log', FILENAME = N'E:\SDE\_test\py_db_test2_log.ldf', SIZE = 4MB , MAXSIZE = 10MB, FILEGROWTH = 10%)
GO

USE [py_db_test2]
GO

Traceback (most recent call last):
  File "C:/Users/calebma/Desktop/create_sql_db.py", line 40, in <module>
    create_db('_test', 'py_db_test2')
  File "C:/Users/calebma/Desktop/create_sql_db.py", line 35, in create_db
    cursor.execute(sqlcommand)
Error: ('08004', "[08004] [Microsoft][ODBC SQL Server Driver][SQL Server]Database 'py_db_test2' does not exist. Make sure that the name is entered correctly. (911) (SQLExecDirectW); [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'GO'. (102); [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'GO'. (102)")
>>>

问题答案:

GO是SQL Server ManagementStudio中的批处理终止符。在中没有任何意义pyodbc。而是从脚本中发出单独的命令。

更新的代码:

import pyodbc, os

def create_db(folder, db_name):
    unc = r'\\arcsql\SDE\{0}'.format(folder)
    if not os.path.exists(unc):
        os.makedirs(unc)
    full_name = os.path.join(r'E:\SDE', folder, db_name)
    conn = pyodbc.connect("driver={SQL Server}; server=ArcSQL; database=master; Trusted_Connection=yes", automcommit=True) 
    cursor = conn.cursor()
    sqlcommand = """
CREATE DATABASE [{0}] ON PRIMARY
( NAME = N'{0}', FILENAME = N'{1}.mdf', SIZE = 4MB , MAXSIZE = 10MB, FILEGROWTH = 1MB )
LOG ON
( NAME = N'{0}_log', FILENAME = N'{1}_log.ldf', SIZE = 4MB , MAXSIZE = 10MB, FILEGROWTH = 10%)
""".format(db_name, full_name)
    print sqlcommand

    cursor.execute(sqlcommand)
    print 'Created "{0}"'.format(db_name)

    # Do stuff in the new database
    conn = pyodbc.connect("driver={SQL Server}; server=ArcSQL; database={0}; Trusted_Connection=yes".format(db_name), automcommit=True)

if __name__ == '__main__':
    #test
    create_db('_test', 'py_db_test')


 类似资料:
  • 问题内容: 我正在使用pyodbc驱动程序使用SQL连接到Microsoft访问表。有谁知道我要如何替换此表中的字段?我虽然要删除行,然后再放回行,但是由于访问中的自动编号,这将更改主键。 我有这个要插入到进度表中: 那么我将如何替换这些字段。假设我想将CockpitDrill从‘2’更改为‘3’,(它们都是字符串)。 任何帮助将不胜感激。 问题答案: 您可以像现在执行INSERT一样执行UPDA

  • 问题内容: 嗨,我在使用sql查询时遇到问题,它在控制台中可以完美地工作,但是当我在python中实现时,它似乎可以完美地工作,但是没有错误,但是当我检查数据库时,它没有起作用,但是在控制台中,它确实可以工作,但是没有错误。我检查数据库中的数据是否存在…我使用的查询完全相同。 有任何想法吗? 在python中: 查询在打印中显示良好,没有问题,如果我将打印内容复制并粘贴到mysql控制台中,则每次

  • 我有一个API调用,它需要从MySQL数据库中提取一些信息,以便完成请求。问题是,NodeJS不会等待查询响应,我已经尝试用承诺来解决这个问题。下面是我的代码: 这个函数将返回Promise对象,这将触发SQL语法错误,因为这不是预期的数据库输入。我做错了什么?任何建议都非常感谢。

  • 问题内容: 我在Python中使用以下代码(对于MS-Access,使用pyodbc)。 可以,但是出于维护目的,我需要知道发送到数据库的完整且确切的SQL字符串。 有可能吗? 问题答案: 答案是不。我在项目的本地Google代码(以及Google论坛)上发布了我的问题,答案是: l … @ deller.id.au对问题163的评论#1:cursor.mogrify返回查询字符串 http://

  • 我正试图用下面给出的代码,用pyodbc从SQL数据库中提取数据。连接很少工作,大多数时候会出错, OperationalError:(“HYT00”,“[HYT00][Microsoft][ODBC SQL Server驱动程序]登录超时过期(0)(SQLDriverConnect)”) 在使用SQL Server 2014时,我尝试将超时设置为零和Driver={SQL Server的ODBC