Вы можете сделать все это напрямую с помощью OSMnx:
import osmnx as ox
from shapely.geometry import Point
station_point = (-71.083364, 42.341586)
projected_point, projection_crs = ox.project_geometry(Point(station_point))
projected_buffer = projected_point.buffer(400)
buffer, latlong_crs = ox.project_geometry(projected_buffer, crs=projection_crs, to_latlong=True)
G = ox.graph_from_polygon(buffer)
Определить точку станции, спроецировать ее на метры (UTM), буферизовать ее радиусом 400 м, спроецировать буфер обратно на широту, затем подключите уличную сеть.
Хорошо, я думаю, что нашел его.
table.Columns[0].EnumForeignKeys()
или непосредственно
table.EnumForeignKeys ()
I ожидал свойства вместо функции. Я уверен, что за кулисами он делает то, что предложил cmsjr.
Используя SMO, вы можете сделать это:
using Microsoft.SqlServer.Management.Smo;
Server localServer = new Server("your server name");
Database dasecoDB = localServer.Databases["your database name"];
Table table = dasecoDB.Tables["your table name"];
foreach(ForeignKey fk in table.ForeignKeys)
{
Console.WriteLine("Foreign key {0} references table {1} and key {2}", fk.Name, fk.ReferencedTable, fk.ReferencedKey);
}
Marc
Этот запрос должен работать и может быть выполнен с использованием базы данных. ExecuteWithResults
Select fk.Table_Name from
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK
ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK
ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
where PK.Table_Name = 'SomeTable'
например
SqlConnection sqlConnection =
new SqlConnection(@"Integrated Security=SSPI; Data Source=SomeInstance");
Server server = new Server(serverConnection);
Database db = server.Databases["somedatabase"];
DataSet ds = db.ExecuteWithResults(thesqlabove);
Вы можете использовать представления INFORMATION_SCHEMA
.
даст INFORMATION_SCHEMA.TABLE_CONSTRAINTS
имена первичных ключей в этой таблице.
SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = @TableName
С учетом имен первичных ключей вы можете получить референциальные ограничения, использующие эти ключи, из INFORMRE_FINTS.SCHE.
И затем имена таблиц путем запроса INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE
Не SMO как таковой, но, учитывая вышеизложенное, вы сможете составить запрос, который выведет список ограничений, которые необходимо отключить.
У меня это не работает.
] Рассмотрим следующие отношения:
Таблица1 -> главная таблица; Table2 -> slave table;
Table2.Table1_ID - это внешний ключ Table1.ID
Table1.EnumForeignKeys () return null.
Вместо этого я успешно попробовал объект DependencyWalker. В следующем коде перечислены все таблицы, которые выходят из заданного набора таблиц.
DependencyWalker w = new DependencyWalker(db.Parent);
DependencyTree tree = w.DiscoverDependencies(urns,false);
DependencyCollection depends = w.WalkDependencies(tree);
foreach (DependencyCollectionNode dcn in depends)
{
if (dcn.Urn.Type == "Table")
{
dcn.Urn.GetNameForType("Table");
Console.WriteLine(dcn.Urn.GetNameForType("Table"));
}
}
где «urns» - это набор table.Urn.