【问题标题】:Issue creating table in MS SQL Database with Python script使用 Python 脚本在 MS SQL 数据库中创建表的问题
【发布时间】:2012-10-02 01:16:06
【问题描述】:
  import pyodbc
  cnxn = pyodbc.connect('DRIVER={SQL Server};' +
                           'SERVER=' + data.dbConnection()[0] + ';' +
                           'DATABASE=' + data.dbConnection()[3] + ';' +
                           'UID=' + data.dbConnection()[1] + ';' +
                           'PWD=' + data.dbConnection()[2])
  cursor = cnxn.cursor()
  cursor.execute(
  """
  CREATE TABLE Persons
  (
  P_Id int,
  LastName varchar(255),
  FirstName varchar(255),
  Address varchar(255),
  City varchar(255)
  )
  """
             )
  cursor.close()
  cnxn.close()

以上代码成功连接数据库。该脚本在运行时也不会返回任何错误,但是当我检查表是否已创建时,SQL DB 中根本没有表。

为什么没有创建表,为什么没有返回错误?

【问题讨论】:

  • 我会首先使用相同的连接查询创建的表,也许会在其中插入一些东西。很有可能也会成功。那么这两种可能性是:1)您没有打开自动事务提交 2)您签入了错误的架构并且该表实际上存在
  • 你是对的,该表确实存在。您能向我解释一下如何在 Microsoft SQL Management Studio 中检查正确的架构吗?
  • 在左侧树上,打开名为 Databases 的节点。那里将有一个用于系统数据库的节点(默认创建几个),并为您创建的每个用户数据库提供单独的节点。打开您连接到的任何数据库的节点,找到名为表的节点,然后打开它。现在,您应该看到新创建的表和数据库中的任何其他表。右键单击表名以获得各种选项。

标签: python sql sql-server


【解决方案1】:

我认为您需要在 cnxn.close() 之前添加 cnxn.commit() 命令。这就是你如何将程序中所做的更改保存到数据库中

【讨论】:

  • 我遇到了同样的问题,这就是我的问题的答案。不幸的是,在 Microsoft 文档示例中,它并没有说您需要调用 commit。
【解决方案2】:

MS SQL Server 中的每个用户都有一个与之关联的默认架构。配置详细信息取决于 SQL Server 的版本,并在企业管理器中进行配置。我认为 SQL Management Studio 没有 GUI 可见性。
您可以尝试使用以下方法查询它:

select default_schema_name
, type_desc
, name
, create_date
from sys.database_principals
order by default_schema_name
, type_desc
, name

您还可以通过在表名前添加模式名称前缀来显式创建特定模式中的表,即

create myschema.mytable as...

【讨论】:

  • 进一步调查问题,这一行不见了。 'code' cursor.commit() #这条语句将更改写入DB 'code' 表存在的原因,是因为我检查的方式找到了临时表。
【解决方案3】:

在关闭连接之前,您的语句没有提交语句。在 cursor.close()cnxn.close() 语句之前使用 cnxn.commit() 语句。

【讨论】:

    猜你喜欢
    • 2011-08-11
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    相关资源
    最近更新 更多