Python 如何生成表';在SqlServer中以编程方式实现DDL?
我正在尝试使用Python在SQL Server中生成表的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
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中的一个过程可以返回多个数据集。 您必须检查:
数据集中的游标只读行。在游标之前,需要在组件的多个数据集上有一个循环。