Поздний ответ, но, возможно, кто-то найдет его полезным.
Во-первых, вам не нужно совершать (по крайней мере, промежуточные запросы, которые я предполагая, что вы спрашиваете). Второй запрос зависает бесконечно, потому что вы эффективно создаете два параллельных подключения к базе данных. Первый - это получение блокировки выбранных записей, затем вторая попытка изменения заблокированных записей. Поэтому он не может работать должным образом. (Кстати, в приведенном примере вы вообще не вызываете первый запрос, поэтому я предполагаю, что в ваших реальных тестах вы делали что-то вроде s.execute()
где-то). Итак, для точечной работы нужно больше походить:
s = conn.execute(table.select(table.c.user=="test", for_update=True))
u = conn.execute(table.update().where(table.c.user=="test), {"email": "foo"})
conn.commit()
Конечно, в таком простом случае нет причин делать какие-либо блокировки, но я думаю, что это пример только, и вы планировали добавить некоторые дополнительные логика между этими двумя вызовами.
Вы пытаетесь вращать shapely.Polygon
, а не GeoPandas.GeoSeries
, поэтому для этого вам нужно использовать стройную фигуру.
import geopandas as gpd
import shapely
p1 = shapely.geometry.Polygon([(0, 0), (1, 0), (1, 1), (0, 1)])
p2 = shapely.geometry.Polygon([(2, 0), (3, 0), (3, 1), (2, 1)])
g = gpd.GeoSeries([p1, p2])
gdf = gpd.GeoDataFrame(geometry=g)
gdf['angle'] = [25, 45]
for index, row in gdf.iterrows():
rotated = shapely.affinity.rotate(row['geometry'], row['angle'])
gdf.loc[index, 'geometry'] = rotated