Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何生成表';在SqlServer中以编程方式实现DDL?_Python_Sql Server - Fatal编程技术网

Python 如何生成表';在SqlServer中以编程方式实现DDL?

Python 如何生成表';在SqlServer中以编程方式实现DDL?,python,sql-server,Python,Sql Server,我正在尝试使用Python在SQL Server中生成表的DDL。我试图运行语句:showcreatetableschema.table,但该语句不起作用。因此,我在网上搜索了一些帮助,发现我们可以运行proc:sp_help作为exec sp_help schema.tablename。我尝试生成DDL的原因之一是获取DDL并在我的目标数据库中创建它们(在snowflake中&我也在编写代码来创建表),从表中获取主键和唯一键,并在代码中使用它们(某些要求) 当我运行如下所示的show crea

我正在尝试使用Python在SQL Server中生成表的DDL。我试图运行语句:
showcreatetableschema.table
,但该语句不起作用。因此,我在网上搜索了一些帮助,发现我们可以运行proc:
sp_help
作为
exec sp_help schema.tablename
。我尝试生成DDL的原因之一是获取DDL并在我的目标数据库中创建它们(在snowflake中&我也在编写代码来创建表),从表中获取主键和唯一键,并在代码中使用它们(某些要求)

当我运行如下所示的show create表时,我得到如下语法错误:

import pyodbc 
cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
                      "Server=servername;"
                      "Database=dbname;"
                      "uid=user;pwd=pwd")
cursor = cnxn.cursor()
cursor.execute('show create table dbname.tablename')
exec sp_help 'dbo.tablename';
>>> import pymssql
>>> conn = pymssql.connect(host='Server\\Server',user='user', password='pwd',database='dbname')
>>> cur = conn.cursor()
>>> cursor.execute("exec sp_help 'dbo.tablename'")
>>> for r in cursor:
...     print(r)
...
错误:

pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near 'tablename'. (102) (SQLExecDirectW)")
因此,我在Sql Server management studio中运行了sp_帮助,如下所示:

import pyodbc 
cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
                      "Server=servername;"
                      "Database=dbname;"
                      "uid=user;pwd=pwd")
cursor = cnxn.cursor()
cursor.execute('show create table dbname.tablename')
exec sp_help 'dbo.tablename';
>>> import pymssql
>>> conn = pymssql.connect(host='Server\\Server',user='user', password='pwd',database='dbname')
>>> cur = conn.cursor()
>>> cursor.execute("exec sp_help 'dbo.tablename'")
>>> for r in cursor:
...     print(r)
...
结果是:

('tablename', 'dbo', 'user table', datetime.datetime(2020, 8, 27, 9, 51, 11, 213000))

在图像中,proc:sp_帮助返回大量数据,列名显示在结果的第二个表中&键约束显示在结果的最后一个表中

所有这些结果都可以在SQLServerStudio中找到。因此,我在python中运行了这个过程,如下所示:

import pyodbc 
cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
                      "Server=servername;"
                      "Database=dbname;"
                      "uid=user;pwd=pwd")
cursor = cnxn.cursor()
cursor.execute('show create table dbname.tablename')
exec sp_help 'dbo.tablename';
>>> import pymssql
>>> conn = pymssql.connect(host='Server\\Server',user='user', password='pwd',database='dbname')
>>> cur = conn.cursor()
>>> cursor.execute("exec sp_help 'dbo.tablename'")
>>> for r in cursor:
...     print(r)
...
但如果我迭代游标的结果,如下所示:

import pyodbc 
cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
                      "Server=servername;"
                      "Database=dbname;"
                      "uid=user;pwd=pwd")
cursor = cnxn.cursor()
cursor.execute('show create table dbname.tablename')
exec sp_help 'dbo.tablename';
>>> import pymssql
>>> conn = pymssql.connect(host='Server\\Server',user='user', password='pwd',database='dbname')
>>> cur = conn.cursor()
>>> cursor.execute("exec sp_help 'dbo.tablename'")
>>> for r in cursor:
...     print(r)
...
我只看到结果中的第一个表格:

('tablename', 'dbo', 'user table', datetime.datetime(2020, 8, 27, 9, 51, 11, 213000))
此结果是上图中结果的第一个表格

循环不会打印图像中显示的其他详细信息,我不明白如何正确实现循环以打印/访问上图中显示的其他数据。
我是否可以用Python从SQL Server获取DDL?非常感谢您的帮助。

事实上,SQL Server中的一个过程可以返回多个数据集。 您必须检查:

  • 您的语言在执行过程时管理多个数据集的能力(某些语言无法!)
  • 在多个数据集上执行循环

  • 数据集中的游标只读行。在游标之前,需要在组件的多个数据集上有一个循环。